他の言語(たとえば、bashおよびPythonなど)では、子プロセスを生成するときに、この新しいプロセスが親からstdoutおよびstderrを継承します。これは、子プロセスからのすべての出力が、親からの出力だけでなく端末にも出力されることを意味します。子プロセスstdout/stderrをJavaのメインプロセスstdout/stderrにリダイレクトする方法は?
Javaでどのように同じ動作を達成できますか?
私の最初の試みでした:
proc = Runtime.getRuntime().exec(cmd);
しかし、それは動作しません。 this answerとthis answerに基づいて、私は、コードを交換しました:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(System.out);
pb.redirectError(System.err);
しかし、引数が期待されるメソッドのパラメータと互換性がないとして、これはさらに、コンパイルされません。
...
....何かのように内部で実行されている:私は当初、私は私がInputStreamConsumerをコーディングしなければならなかっただろう実現、「簡単」と述べました1つのストリームから読み込みを続け、別のストリームに書き込むループを実装しますか?申し訳ありませんが、実行可能ではありません。あまりにも多くの作業(おそらく新しいスレッドで実行する必要があり、バグの可能性のある点がたくさんあります)。 –
実行可能かどうかはこれまで必要とされていたものです。私はちょうどJava 7 APIをチェックして、それは対処されているように見えます - あなたはRedirect.INHERITであなたが望むものを達成するために見えるredirectOutputを呼び出すことができるようになりました。 – henry