【发布时间】:2016-02-28 11:05:50
【问题描述】:
我正在尝试从 Java 代码运行 perl 脚本并使用以下代码读取它的输出:
String cmd = "/var/tmp/./myscript";
Process process = Runtime.getRuntime().exec(cmd);
stdin = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while((line = stdin.readLine()) != null) {
System.out.println(line);
}
但代码总是挂在 readLine() 上。
我尝试过使用
stdin.read();
相反,但这也会挂起。 尝试将cmd修改为
cmd = "perl /var/tmp/myscript";
还有
cmd = {"perl","/var/tmp/myscript"};
但这也挂了。 尝试在单独的线程中读取标准输入。尝试在单独的线程中读取标准输入和标准错误。还是没有运气。
我知道这里有很多问题处理 Process.waitFor() 由于未读取流而挂起,以及 BufferedReader.read() 挂起,尝试了所有建议的解决方案,仍然没有运气。
当然,在 CLI 本身上运行相同的脚本会将输出写入标准输出(控制台)并以退出代码 0 存在。 我在 Centos 6.6 上运行。
我们将不胜感激。
【问题讨论】:
-
你的 perl 程序是否只产生输出?还是需要任何输入?要求“按返回”继续?
-
无需输入。如前所述,相同的命令在终端中执行就好了。
标签: java command-line-interface