簡體   English   中英

從Java運行命令行的問題

[英]Problems with running command line from Java

我一直在嘗試使用以下命令從Java運行已編譯的C程序。 然后,我想從流程的輸入流中獲取結果。

Process p = Runtime.getRuntime().exec(commandLine);

現在,我的命令是這樣的(第一個字符串是程序的路徑,第二個字符串是文件的路徑,程序將其作為參數):

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流均為空,並且進程的退出狀態是一些錯誤代碼。

這是最小的“有效”示例(我省略了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和其他地方閱讀了其他答案。 不幸的是,答案中的代碼與我的代碼幾乎相同(並且對我來說不起作用,因為我的代碼不起作用)。

有人可以告訴我,我做錯了什么嗎? 為什么stdout流為空而不是包含C程序的輸出? 為什么進程不以狀態0(應有的狀態)退出,而是以前面提到的怪獸退出? 最后,如果您知道為什么我的Java代碼無法按預期運行,您能否解釋一下,為什么從命令行使用完全相同的命令?

提前致謝。

該程序似乎無法在其環境中獲得所需的東西。 您說程序退出時帶有錯誤代碼-聽起來您的Java代碼正在正確執行應做的事情(啟動程序並讀取退出代碼)。

您的路徑看起來是相對的-也許Java不在您認為是的目錄中啟動? 嘗試為您的論點提供完整的路徑,看看是否有幫助。

有沒有辦法可以從應用程序解釋錯誤代碼?

如果所有其他方法均失敗,請嘗試使用完整路徑通過外殼程序(取決於您的操作系統,使用cmd / c或sh)運行它。 您可以在沒有Java的情況下進行測試,然后將整個內容傳遞給Java,看看是否得到相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM