【发布时间】:2018-02-04 17:06:22
【问题描述】:
我想运行一个带有 popen 的子进程,它可以向 stdout 和 stderr 发送消息,但是尽管写入 stderr,该子进程仍将继续以愉快的方式继续。
我想将 stdout 和 stderr 一起流式传输,以便按照它发生的确切顺序获得输出(或者我猜从技术上讲是被刷新了)。然后,我想记录完整的结果集。但我也想独立知道 stderr 是否为空。如果不是,我将抛出一个异常。
我很清楚如何将它们分开或合并在一起,但我如何才能同时做到这两者?
【问题讨论】:
-
如何将它们合并在一起?您是指在屏幕上还是在变量中?
-
在一个变量中。如果这样更容易的话,我也可以使用平面文件。
-
我已经开始考虑使用这篇文章中的一些想法:stackoverflow.com/questions/16396873/popen-mixed-data-stream
-
我看到这些方法的问题是它们不是为真正的“快速”流而设计的,而且似乎没有对事件顺序的精确控制。我正在轮询的过程可以闪电般快速地工作并在两个流上转储消息。使用任意睡眠,以及来自 sdtout 和 stderr 的 readline() 可以给我一个很好的消息顺序近似值,但它并不完美,将两个流重定向到同一个文件描述符的方式将是。 (假设每次写入时都会发生刷新,我认为确实如此......)
-
我可以使用 popen 的替代方法,或者 shell 命令重定向流的某种组合。按顺序组合这些消息是一项常见且典型的任务。我觉得应该有一种干净简单的方法来检测是否有任何东西通过 stderr 流...
标签: python stdout popen stderr