在 Java 中,我想调用grep
命令并将其输出发送到标准输出。我可以做这个:
ProcessBuilder pb = new ProcessBuilder("grep", "regexp", "foo.txt");
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
pb.start().waitFor();
但是,grep
进程的stdout实际上是通过管道传送到java进程,然后打印出来的。当数据很大时,这可能是低效的。
一个肮脏的方法是找到java进程的stdout(例如by readlink(/proc/self/fd/1)
)然后调用pb.redirectOutput(ProcessBuilder.Redirect.appendTo(new File(MYSTDOUTFILE)));
,但是有更好的方法吗?