【问题标题】:The best way to monitor output of process along with its execution监控流程输出及其执行的最佳方式
【发布时间】:2010-07-20 16:34:25
【问题描述】:

我已经在我的 Java 代码中启动了一个进程,这个进程需要很长时间才能运行,并且可能会不时产生一些输出。我需要在生成每个输出时对其做出反应,最好的方法是什么?

【问题讨论】:

    标签: java multithreading iostream


    【解决方案1】:

    你说的是什么反应?进程是否写入其标准输出和/或标准错误?如果是这样,我怀疑 Process.getInputStreamProcess.getErrorStream 是您正在寻找的。阅读这两篇文章并做出相应的反应。请注意,您可能希望从不同的线程中读取它们,以避免任一流的单独缓冲区被填满。

    或者,如果您不需要两者分开,只需将ProcessBuilder 中的redirectErrorStream 保留为false,这样错误流和输出流就会合并。

    【讨论】:

      【解决方案2】:

      您应该启动一个从Process.getInputStream()getErrorStream()(或者使用ProcessBuilder.redirectErrorStream(true))读取的线程,并在流中出现某些内容时处理它。有很多方法可以处理它——正确的方法取决于数据的使用方式。请告诉更多细节。

      这是一个真实的例子:SbtRunner 使用ProcessRunner 向命令行应用程序发送命令并等待命令完成执行(当命令完成执行时应用程序将打印“>”)。发生了一些间接事件,以便更容易地从进程的输出中读取(输出被写入 MulticastPipe,然后由 OutputReader 读取)。

      【讨论】:

      • 谢谢你的链接,我去看看
      猜你喜欢
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多