为了账号安全,请及时绑定邮箱和手机立即绑定

调用Runtime.exec时捕获stdout

调用Runtime.exec时捕获stdout

跃然一笑 2019-06-10 20:22:02
调用Runtime.exec时捕获stdout当在客户端计算机上遇到网络问题时,我希望能够运行几行命令行,并将结果发送给自己。我发现Runtime.exec将允许我执行任意命令,但是在字符串中收集结果更有趣。我意识到我可以将输出重定向到一个文件中,然后从文件中读取,但我的感觉是,有一种更优雅的方法。建议?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您需要同时捕获进程中的STD Out和STD错误。然后,您可以将STD写到文件/邮件或类似的文件中。

看见这篇文章有关更多信息,特别是请注意StreamGobbler在不同线程中捕获stdout/err的机制。这是必要的,以防止阻塞,是许多错误的来源,如果你不正确地做它!


查看完整回答
反对 回复 2019-06-10
?
森林海

TA贡献2011条经验 获得超2个赞

使用ProcessBuilder..调用start()之后,您将得到一个加工过程对象,可以从中获取stderr和stdout流。

更新:ProcessBuilder为您提供了更多的控制权;您不必使用它,但从长远来看,我发现它更容易使用。特别是将stderr重定向到stdout的能力,这意味着您只需吸下一条流。


查看完整回答
反对 回复 2019-06-10
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

使用[医]Utils丛,Maven使用它来执行所有外部进程。

Commandline commandLine = new Commandline();

commandLine.setExecutable(executable.getAbsolutePath());


Collection<String> args = getArguments();


for (String arg : args) {

    Arg _arg = commandLine.createArg();

    _arg.setValue(arg);

}


WriterStreamConsumer systemOut = new WriterStreamConsumer(console);

WriterStreamConsumer systemErr = new WriterStreamConsumer(console);


returnCode = CommandLineUtils.executeCommandLine(commandLine, systemOut, systemErr, 10);

if (returnCode != 0) {

    // bad

} else {

    // good

}


查看完整回答
反对 回复 2019-06-10
  • 3 回答
  • 0 关注
  • 690 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号