2016-08-04 21 views
1

標準のjava.lang.Processを使用して、Javaから外部プロセスを起動します。 私は、プロセスの出力が何であるかを調べようとしていますが、stdoutstderrの両方を組み合わせた形式です。Javaからの外部プロセスの起動:stdoutとstderr

現在、私はProcess#getInputStreamにアクセスしてstdoutにアクセスし、Process#getErrorStreamにはstderrへのアクセスを提供しています。 stdoutとstderrの出力をタイムスタンプで順序付けることができない点を除いて、これはすべて役に立ちます。をstdoutに書き込ま

  • れる1ライン(C)をstderrに書き込ま
  • 一行(B)をstdoutに書き込ま

    • つ線(A):

      プロセスは、このような出力を有していると言います

    Javaでは、行(B)が(A)の前と(C)の前に書かれたことを知ることはできません。 外部プロセスのstdoutとstderrをマージする方法があるかどうかを知りたいので、どのような順序でステートメントが出力されるかを知ることができます。

  • +0

    これらの出力はJavaで取り込めないのですか?そうでない場合は、ログファイル –

    答えて

    2

    プレーンなRuntime.exec()ではなくProcessBuilder APIを使用すると、OutputストリームとErrorストリームを同じストリームにリダイレクトするなど、リダイレクトできます。

    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);私のPC(Windows 10、Java 8)で、perlプログラムを外部で実行しているときに、すべての警告とエラーメッセージが他の出力の前に表示されます。実際の注文とは関係なく、内部のバッチかnoからリダイレクトするスイッチ2> &内部のバッチは内部では役に立ちません

    +0

    Magduteに順番にマークするログレベルであるため、これは元の質問に対する回答のようには見えません。ここであなた自身の問題に対する答えを得ようとしていますか?はいの場合は、別の質問を作成する必要があります。 – sesm

    関連する問題