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や「読み取り中ループ」を使用せずに、プロセスの出力を標準出力に直接表示したいと考えています。出来ますか?
ありがとう。
現在のJavaプロセスと同じI/Oを使用するためにProcessBuilder.inheritIO()
を試してください。さらに、次のことができます デイジーチェーン メソッド:
ProcessBuilder pb = new ProcessBuilder("cmd")
.inheritIO()
.directory(new File("C:"));
pb.start();
重要な部分を見逃しました。実際にプロセスを開始し、出力を待つ必要があります。これはうまくいくと思います
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();
}