运行命令并将其stdout和stderr指向屏幕和日志文件的可移植方式是什么,其中文件的每个文件都有一个标题。日志文件的格式如下:
*STDOUT*
foo
bar
blah
*STDERR*
more
stuff
编辑:有关@Jonathan和@Etan提出的问题的更多信息。
此命令将由Python脚本发出,并且需要记录stdout和stderr以进行检查以确保进程正确运行并且其输出文件可以进行到下一步。为了它的价值,我研究了子进程模块及其管道stdout和stderr的能力;但是,该模块中的stdout内存存在硬编码限制,因此超过65K的任何内容都会导致死锁。
该命令不是交互式的(实际上,如果由于某种原因请求stdin,理想情况下应该终止该进程并将该步骤标记为有错误)。拥有上述日志文件的格式为我节省了几行Python代码,用于合并stdout.log和stderr.log文件(Python运行的每个进程都需要有一个日志文件,而不仅仅是脚本稍后解析在,但也为人类阅读,以帮助调试)。因此,并不是绝对需要这样做,但它会很好(假设它很容易做,最重要的是,便携式)。将stdout和stderr隔离是非常重要的,因为如果有任何stderr,某些进程应该被标记为失败。
听起来最真实的做法是使用以下方法将stdout和stderr记录在单独的文件中:
(cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log
然后读取,解析并将它们合并到我的Python脚本中的单个文件中。