我需要使用进程生成器运行shell脚本或系统命令。在某些情况下,该命令将要求用户输入。例如,我有一个Java程序“TestScanner”,它从命令行获取一个整数并将其打印出来。如果我直接在终端运行它,像java进程生成器:使用用户输入从命令行运行程序
$bash -c "java TestScanner"
Enter a number:3
Number entered:3
$
该程序显示消息输入。然后我输入“3”,然后打印结果并终止程序。
现在我需要从Java进程生成器运行的命令
bash -c "java TestScanner"
。代码是
// 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);
}
当我运行上面的代码片段时,它只是挂在那里。我甚至看不到“输入号码”消息。我不确定这是否是因为p.getOutputStream()正在等待?如何检测程序请求的输入?我尝试从这里Java Process with Input/Output Stream代码片段,它不适用于我的情况。谢谢
类似于[this](http://stackoverflow.com/questions/18838904/java-program-that-runs-commands-with-linux-terminal/18839348#18839348)或[this](http:// stackoverflow.com/questions/32343355/java-linux-terminal-in-jpanel/32343778#32343778) – MadProgrammer
这非常有帮助。谢谢 – CMZS