我一直在嘗試使用以下命令從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