我一直在尝试使用以下命令从Java运行编译的C程序。然后我想从流程的输入流中获得结果。从Java运行命令行的问题
Process p = Runtime.getRuntime().exec(commandLine);
现在,我的命令是这个(第一字符串路径程序,第二和第三是路径的文件,这方案需要为PARAMS):
trec_eval.8.1\trec_eval.exe trec_eval.8.1\czech TREC\results_2016-04-26_20_52_175.txt
当我运行它通常是从命令(我在Windows 10上),它按预期工作(C程序完成没有错误,并将预期的输出打印到命令行中),但是,当我从Java运行它时,它不起作用。进程的stdout和stderr流都是空的,进程的退出状态是一些错误代码。
下面是最小的 “工作” 的例子(I省略stderr的流,因为它使该代码段太长):
从这个代码String commandLine = "trec_eval.8.1\\trec_eval.exe" +
" trec_eval.8.1\\czech + " " + file;
System.out.println("Command: " + commandLine);
Process process = Runtime.getRuntime().exec(commandLine);
BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder output = new StringBuilder("Output:\n");
for (String line; (line = stdout.readLine()) != null;) {
output.append(line).append("\n");
}
System.out.println(output.toString());
int exitStatus = 0;
try {
exitStatus = process.waitFor();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
System.out.println("Exit status: " + exitStatus);
stdout.close();
输出被下列行:
Command: trec_eval.8.1\trec_eval.exe trec_eval.8.1\czech TREC\results_2016-04-27_18_27_585.txt
Output:
Exit status: -1073741515
显然,我在这里阅读了Stackoverflow和其他地方的其他几个答案。不幸的是,上述答案中的代码与我的代码非常相似(并且与我的代码无法工作的方式相同)。
有人可以告诉我,我做错了什么?为什么标准输出流是空的而不是包含C程序的输出?为什么程序不会以状态0退出(它应该如此),但是前面提到的怪物?最后,如果你知道,为什么我的Java代码不能按预期工作,你能解释一下,为什么命令行中的命令完全相同?
在此先感谢。
错误代码可能是因为找不到您尝试启动的文件。尝试将路径更改为绝对路径而不是相对路径。或者因为你没有从你期望的目录开始,所以找不到命令的参数。 – MTilsted