2016-08-04 16 views
1

我啓動從Java外部進程,使用標準java.lang.Process。 我試圖找出進程的產量,但在結合了stdoutstderr的格式。啓動從Java外部流程:輸出和錯誤

目前,我有Process#getInputStream,它提供訪問stdoutProcess#getErrorStream,它提供訪問stderr。 這很好,除了我們不能通過stdout和stderr命令輸出他們的時間戳。

說的方法具有這樣的輸出:寫入stdout寫入stderr寫入stdout

  • 一條線(C)
  • 一條線(B)

    • 一條線(A)

    Java將不允許我們知道,線(B)是(a)之後的書面和前(C)。 我想知道是否有任何方法來合併外部進程的stdout和stderr,以便我們知道打印輸出的語句的順序。

  • +0

    只是快速q,是工藝的這些輸出不能在Java中捕獲的?因爲否則這些都是日誌級別,你可以將它們依次標記爲日誌文件 –

    回答

    2

    如果您使用ProcessBuilder API而不是普通的Runtime.exec(),那麼您可以重定向輸出和錯誤流,包括將它們重定向到同一個流。

    ProcessBuilder pb = 
        new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
    pb.redirectErrorStream(true); // merges err with out 
    pb.redirectOutput(Redirect.appendTo(new File("out.txt"))); 
    Process p = pb.start(); 
    p.waitFor(); 
    
    0

    ProcessBuilder.redirectErrorStream(true);沒有按預期工作 - 在我的電腦上(Windows 10,Java 8),當外部執行perl程序時,所有警告和錯誤消息都顯示在任何其他輸出之前,無論真正的順序是什麼,並且無論是預先cmd/c還是no,從內部批次執行或沒有,甚至重定向開關2> & 1內部批次沒有幫助

    +0

    Magdute,這看起來不像原始問題的答案。你試圖在這裏得到你自己的問題的答案嗎?如果是,那麼你應該創建一個單獨的問題。 – sesm