如何统一标准输出和标准输出,同时又能够区分它们?



>我想生成一个可读的 HTML 报告。为此,我想跟踪stdoutstderr,并交错输出它们,但有区别 - 例如,日志将根据它们的发射顺序显示它们的组合,但stdout为黑色,stderr为粗体红色。

我可以很容易地看到一个解决方案,可以让他们与众不同:只需将每个重定向到subprocess.PIPE。当然,它们不能按顺序重新组合。按顺序统一它们也很容易:只需将stderr重定向到subprocess.STDOUT.但是,它们将无法区分。

因此,让输出按顺序区分组合是很简单的,但同时获得两者则不是。

在 Python 中这样做的方法是什么?

您可以使用select()来多路复用输出。 假设您在管道中捕获了 stdout 和 stderr,则此代码将起作用:

import select
import sys
inputs = set([pipe_stdout, pipe_stderr])
while inputs:
readable, _, _ = select.select(inputs, [], [])
for x in readable:
line = x.readline()
if len(line) == 0:
inputs.discard(x)
if x == pipe_stdout
print 'STDOUT', line
if x == pipe_stderr
print 'STDERR', line

相关内容

  • 没有找到相关文章

最新更新