web-dev-qa-db-ja.com

標準出力にリダイレクトされたProcessBuilder

Javaプロセス出力を親の標準出力にリダイレクトしたいJavaプロセス。

次のようにProcessBuilderクラスを使用します。

public static void main(String[] args) {
  ProcessBuilder processBuilder = new ProcessBuilder("cmd");
  processBuilder.directory(new File("C:"));   
  processBuilder.redirectErrorStream(true); // redirect error stream to output stream
  processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}

「cmd」の出力は次のようになると期待していました。

Microsoft Windows [バージョン6.1.7601] Copyright(c)2009 Microsoft Corporation。トゥスドロワレゼルブ。

Javaプログラムを実行するために使用されるDOSコンソールに表示されます。しかし、DOSコンソールには何も表示されません。

他のディスカッションスレッドでは、BufferedReaderクラスを使用したソリューションを見ましたが、ここでは、BufferedReaderや「読み取り中ループ」を使用せずに、プロセスの出力を標準出力に直接表示したいと考えています。出来ますか?

ありがとう。

22
John

現在のJavaプロセスと同じI/Oを使用するためにProcessBuilder.inheritIO()を試してください。さらに、次のことができます デイジーチェーン メソッド:

ProcessBuilder pb = new ProcessBuilder("cmd")
    .inheritIO()
    .directory(new File("C:"));
pb.start();
22
Renaud

重要な部分を見逃しました。実際にプロセスを開始し、出力を待つ必要があります。これはうまくいくと思います

processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
// Start the process.
try {
  Process p = processBuilder.start();
  // wait for termination.
  p.waitFor();
} catch (IOException e) {
  e.printStackTrace();
} catch (InterruptedException e) {
  e.printStackTrace();
}
17
Elliott Frisch