在调用 Runtime.exec 时捕获标准输出
在客户端计算机上遇到网络问题时,我希望能够运行一些命令行并通过电子邮件将它们的结果发送给自己。
我发现 Runtime.exec 将允许我执行任意命令,但是在字符串中收集结果更有趣。
我意识到我可以将输出重定向到一个文件,然后从文件中读取,但我的蜘蛛感觉告诉我有一种更优雅的方法来做到这一点。
建议?
在客户端计算机上遇到网络问题时,我希望能够运行一些命令行并通过电子邮件将它们的结果发送给自己。
我发现 Runtime.exec 将允许我执行任意命令,但是在字符串中收集结果更有趣。
我意识到我可以将输出重定向到一个文件,然后从文件中读取,但我的蜘蛛感觉告诉我有一种更优雅的方法来做到这一点。
建议?
您需要在此过程中捕获标准差和标准差错误。然后,您可以将 std 写出到文件/邮件或类似文件中。
有关详细信息,请参阅此文章,并特别注意在单独的线程中捕获 stdout/err 的机制。这对于防止阻塞至关重要,如果您做得不正确,这是许多错误的根源!StreamGobbler
使用 ProcessBuilder。调用 start() 后,您将获得一个 Process 对象,您可以从中获取 stderr 和 stdout 流。
更新:ProcessBuilder为您提供更多控制;您不必使用它,但从长远来看,我发现它更容易。特别是将stderr重定向到stdout的能力,这意味着您只需要吸下一条流。