我希望能够从子进程中独立读取标准输出/标准错误(以及我正在引入的新标准日志),对这些流执行某些操作,然后以相同的顺序将它们写入屏幕和日志文件。
因此,例如,如果子进程想对 stdout 说“aa”,然后对 stderr 说“bb”,然后再对 stdout 说“cc”,我想在屏幕上看到“aabbcc”。如果我看到“aaccbb”,我可以忍受(我想这无济于事),但我当然不想看到“aacbbc”(写在一个错误块“cc”中的东西被拆分)。
因此,这是我提出的流程层次结构:
(P) parent process
\_ (O) logger for stdout
\_ (E) logger for stderr
\_ (C) monitored process
- (C) 标准输出使用管道连接到 (O) 进程,该进程写入日志文件和标准输出
- (C) stderr 使用管道连接到 (E) 写入日志文件和 stderr 的进程
问题在于,根据 (O) 和 (E) 的调度时间,一般输出(由 (O) 和 (E) 的输出组成)可能会出现故障。
有没有办法我可以:
- 有完美的订购吗?我想没有,但也许有一个解决方案......
- 至少确切地知道在 (O) 和 (E) 进程中要读取多少字节,以便我可以将它们整合在一起?
而且,最好使用 python,并且可以跨单元移植。
注意:代码在github 上。整个想法是捕获被监视进程的确切输出,并将其存储在日志文件中。在从 stderr 或 stdout 写入输出之前写入日志文件标记,例如“\0err\0”或“\0std\0”,这样我以后可以从进程中重新生成准确的输出,同时尊重 stdout 和 stderr。
谢谢