我想使用process运行驻留在当前位置的隐藏脚本文件。使用以下代码
// System.out.println("line"+reader.readLine());
ProcessBuilder builder = new ProcessBuilder(shfile.getAbsolutePath());
builder.redirectErrorStream(true);
Process process = builder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String output = null;
System.out.println("out"); //===printing this
while (null != (output = br.readLine()))
{
System.out.println("in"); //not printing this
System.out.println(">>"+output);
}
int rs = process.waitFor();但是它挂在br.readline()中。但是,当我在终端中使用以下命令运行相同的脚本文件时
sh .script.sh它执行并给出预期的结果。
我查看了论坛中的所有循环,每个人都要求处理线程中的输入流和错误流,或者重定向错误流。我添加了一个重定向错误流,但它仍然挂起。
当我按ctrl+c时,它会打印输出和退出的初始行。我的脚本文件的内容
#!/bin/sh
cd /home/ats/cloudripper/lke_factory_asb_v2/lk_assets_factory_release/
sh ./LKE_run_Diablo.sh 0a0e0c3dc893那么如何处理这种情况。
发布于 2022-03-24 12:22:10
Process有特殊的API来重定向子进程输入、输出和错误流。请参见文档,如果您需要子进程和父进程使用相同的控制台,则应该使用继承模式重定向。举个例子:
public class ChildProcessOutputProxy {
public static void main(String[] args) {
ProcessBuilder builder = new ProcessBuilder("whoami");
builder.redirectOutput(Redirect.INHERIT);
builder.redirectErrorStream(true);
try {
var child = builder.start();
child.waitFor();
} catch (IOException e) {
System.err.println(e.getMessage());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
} https://stackoverflow.com/questions/71601515
复制相似问题