【发布时间】:2016-03-04 21:51:28
【问题描述】:
我需要使用进程构建器运行 shell 脚本或系统命令。在某些情况下,该命令会要求用户输入。例如,我有一个 java 程序“TestScanner”,它从命令行获取一个整数并将其打印出来。如果我直接在终端中运行它,就像
$bash -c "java TestScanner"
Enter a number:3
Number entered:3
$
程序显示输入消息。然后我输入“3”,然后它打印出结果,程序终止。
现在我需要运行命令
bash -c "java TestScanner"
来自 java 进程构建器。代码是
// cmdList has 3 elements: bash, -c, java TestScanner
ProcessBuilder pb = new ProcessBuilder(cmdList);
pb.redirectErrorStream(true);
pb.directory(new File(workDir));
Process p = pb.start();
InputStream in = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = br.readLine()) != null)
{
System.out.println("Line: " + line);
}
当我运行上面的代码 sn-p 时,它只是挂在那里。我什至看不到“输入数字”的消息。我不确定这是否是因为 p.getOutputStream() 正在等待?如何检测程序请求输入?我从这里Java Process with Input/Output Stream 尝试了代码 sn-p,但它在我的情况下不起作用。谢谢
【问题讨论】:
标签: java processbuilder