プロセスからの出力のリダイレクト
デフォルトでは、プロセスは標準出力と標準エラーをパイプに書き込みます。アプリケーションでは、Process.getOutputStreamメソッドおよびProcess.getErrorStreamメソッドから返される入力ストリームを使用して、これらのパイプにアクセスできます。ただし、プロセスの起動前に、redirectOutput
メソッドとredirectError
メソッドを使用して、標準出力と標準エラーをファイルなどの他の出力先にリダイレクトすることができます。
次の引用では、redirectToFileTest
メソッドによって標準入力がファイルout.tmp
にリダイレクトされ、次にこのファイルが出力されます。
public static void redirectToFileTest() throws IOException, InterruptedException {
File outFile = new File("out.tmp");
Process p = new ProcessBuilder("ls", "-la")
.redirectOutput(outFile)
.redirectError(Redirect.INHERIT)
.start();
int status = p.waitFor();
if (status == 0) {
p = new ProcessBuilder("cat" , outFile.toString())
.inheritIO()
.start();
p.waitFor();
}
}
引用では、標準出力はファイルout.tmp
にリダイレクトされます。標準エラーは起動したプロセスの標準エラーにリダイレクトされます。値Redirect.INHERITによって、サブプロセスI/Oのソースまたは出力先は現在のプロセスと同じに指定されます。inheritIO()メソッドへのコールはredirectInput(Redirect.INHERIT).redirectOuput(Redirect.INHERIT).redirectError(Redirect.INHERIT)と同等です。