将stdout和stderr重定向到屏幕的便携方式以及包含每个

时间:2016-04-25 23:47:06

标签: shell unix

运行命令并将其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脚本中的单个文件中。

0 个答案:

没有答案