我希望能够独立地从子进程中读取stdout/stderr (以及我正在介绍的一个新的stdlog ),对这些流做一些操作,并以相同的顺序将它们写入屏幕和日志文件。
因此,例如,如果子进程想要将"aa“表示为stdout,则"bb”表示为stderr,然后"cc“再次指向stdout,则需要在屏幕上看到"aabbcc”。如果我看到"aaccbb",我可以容忍它(我想这是没有帮助的),但是我肯定不想看到"aacbbc“(写在一个bug块"cc”中的东西被分割)。
下面是我提出的流程层次结构:
(P) parent process
\_ (O) logger for stdout
\_ (E) logger for stderr
\_ (C) monitored process问题是,根据排定(O)和(E)的时间,一般产出(由(O)和(E)的输出组成)可能会出现混乱。
有什么办法我可以:
而且,最好是使用python,并且可以跨unices移植。
注意:代码在github上。整个想法是捕获监视进程的准确输出,并将其存储在日志文件中。在写入来自stderr或stdout的输出之前,先写入日志文件标记,如"\0err\0“或"\0std\0”,以便以后可以重新生成来自进程的准确输出,同时尊重stdout和stderr。
谢谢
发布于 2013-11-04 20:55:12
如果您将stdout和stderr重定向到同一个管道(即proc1 2>&1 | proc2),那么您就无法控制管道上的顺序,因为它们现在完全相同。stdout和stderr在操作系统中都有相同的路径。
"proc2“读取数据的顺序仅取决于"proc1”写入数据的顺序。该顺序仅依赖于proc1。
通常,一个进程会像这样缓冲数据:
您可以处理python缓冲区,或者使stdout和stderr完全相同,但最简单的方法可能是尝试python -u ...,使所有输出都不被缓冲。这样,proc1的每个写都应该以相同的顺序出现在proc2上。
https://stackoverflow.com/questions/14384232
复制相似问题