gpt4 book ai didi

java - 通过 ProcessBuilder 执行的“C”二进制文件阻塞了执行流程

转载 作者:行者123 更新时间:2023-12-01 04:49:25 26 4
gpt4 key购买 nike

我试图通过Java执行一个二进制文件(用“C”编写),而二进制文件执行成功。在按下“Enter”键之前,它不会将执行控制权返回给该代码(被阻止)。由于这个问题,'prcs.waitfor() == 0'永远不会被执行,用户不知道二进制执行是否成功。我尝试在 OutputStream 上创建 BufferedWriter 来发送“Enter”击键 (//r),但它不起作用。这里需要做什么,以便执行控制返回到这段代码并执行 'prcs.waitfor() ==0'。我需要继续执行另一个命令,该命令取决于第一个命令的成功执行。我被这个问题困扰了:(

    // Start ProcessBuilder, 'str' contains a command

ProcessBuilder pbuilder = new ProcessBuilder(str);
pbuilder.directory(new File("/root/workspace/Project1"));
pbuilder.redirectErrorStream(true);
Process prcs = pbuilder.start();
AForm.execStatustext.append("\n=> Process is:" + prcs);

// Read output
StringBuilder out = new StringBuilder();
BufferedReader bfrd = new BufferedReader(new InputStreamReader(process.getInputStream()));
String current_line = null, previous_line = null;
while ((current_line = bfrd.readLine()) != null) {
if (!line.equals(previous_line)) {
previous_line = current_line;
out.append(current_line).append('\n');
//System.out.println(line);
}
}
//process.getInputStream().close();
// Send 'Enter' keystroke through BufferedWriter to get control back
BufferedWriter bfrout = new BufferedWriter(new OutputStreamWriter(prcs.getOutputStream()));
bfrout.write("\\r");
bfrout.newLine();
bfrout.flush();
bfrout.write("\\r");
bfrout.newLine();
bfrout.flush();
//process.getOutputStream().close();*/

if (prcs.waitFor() == 0)
System.out.println("Commands executed successfully");
System.exit(0);

最佳答案

\\r 不是插入符号返回,它是 \ 后跟 r。插入符号返回只是 \r

此外,bfrout.newLine(); 应该覆盖依赖于平台的行分隔符。也许您根本不需要插入符返回?

关于java - 通过 ProcessBuilder 执行的“C”二进制文件阻塞了执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15240391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com