猿问

调用Runtime.exec时捕获stdout

调用Runtime.exec时捕获stdout

当在客户端计算机上遇到网络问题时,我希望能够运行几行命令行,并将结果发送给自己。

我发现Runtime.exec将允许我执行任意命令,但是在字符串中收集结果更有趣。

我意识到我可以将输出重定向到一个文件中,然后从文件中读取,但我的感觉是,有一种更优雅的方法。

建议?


跃然一笑
浏览 691回答 3
3回答

人到中年有点甜

您需要同时捕获进程中的STD Out和STD错误。然后,您可以将STD写到文件/邮件或类似的文件中。看见这篇文章有关更多信息,特别是请注意StreamGobbler在不同线程中捕获stdout/err的机制。这是必要的,以防止阻塞,是许多错误的来源,如果你不正确地做它!

森林海

使用ProcessBuilder..调用start()之后,您将得到一个加工过程对象,可以从中获取stderr和stdout流。更新:ProcessBuilder为您提供了更多的控制权;您不必使用它,但从长远来看,我发现它更容易使用。特别是将stderr重定向到stdout的能力,这意味着您只需吸下一条流。

一只斗牛犬

使用[医]Utils丛,Maven使用它来执行所有外部进程。Commandline commandLine = new Commandline();commandLine.setExecutable(executable.getAbsolutePath());Collection<String> args = getArguments();for (String arg : args) {&nbsp; &nbsp; Arg _arg = commandLine.createArg();&nbsp; &nbsp; _arg.setValue(arg);}WriterStreamConsumer systemOut = new WriterStreamConsumer(console);WriterStreamConsumer systemErr = new WriterStreamConsumer(console);returnCode = CommandLineUtils.executeCommandLine(commandLine, systemOut, systemErr, 10);if (returnCode != 0) {&nbsp; &nbsp; // bad} else {&nbsp; &nbsp; // good}
随时随地看视频慕课网APP

相关分类

Java
我要回答