簡體   English   中英

Java:從命令行運行時重定向內部進程輸出

[英]Java: Redirecting inner process output when running from command line

我使用以下代碼來重定向從Java應用程序啟動的進程的輸出:

ProcessBuilder builder = new ProcessBuilder("MyProcess.exe");
builder.redirectOutput(Redirect.INHERIT);
builder.redirectErrorStream(true);

現在,當我從eclipse運行代碼時,這可以正常工作-我可以在Eclipse的控制台中看到輸出。
但是,當我創建一個jar文件並從cmd窗口運行它時,例如java -jar MyJar.jar ,它不會顯示該進程的輸出。 這可能是什么原因?

我知道我的回答遲到了,但是在遇到答案之前我遇到了這個問題,並希望在同一船上保存其他人進行搜索。

這實際上是Windows的已知錯誤: https : //bugs.openjdk.java.net/browse/JDK-8023130

您可以通過自己重定向流來解決它:

Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
   System.out.println(line);
}

p.waitFor();

br.close();

可能是由於某種原因該進程正在打印錯誤並退出。 因此,實際輸出進入Err流,而不進入Out流。 您的代碼僅重定向出流,因此重要的過程錯誤信息可能會丟失。 我建議使用以下代碼同時繼承Out和Err流:

ProcessBuilder builder = new ProcessBuilder("MyProcess.exe");
builder.inheritIO();

重定向兩個流的另一個原因與子進程的輸出緩沖有關。 如果父進程(您的Java應用程序)沒有讀取或重定向子進程的標准流(Out和Err),則子進程可能會在一段時間后被阻止,無法取得進一步的進展。

無論如何,在輸出中可能存在錯誤絕對是沒有問題的。

暫無
暫無

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

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