我想启动一个python进程,并将子进程错误消息记录到父脚本的logging对象中。理想情况下,我希望将日志流统一到一个文件中。我可以访问日志类的输出流吗?我知道的一个解决方案是使用proc log进行日志记录。如下面的回答所述,我可以从proc.stdin和stderr中读取,但是我有重复的日志头。我想知道是否有办法将日志类下面的文件描述符直接传递给子进程?
logging.basicConfig(filename="test.log",level=logging.DEBUG)
logging.info("Started")
procLog = open(os.path.expanduser("subproc.log"), 'w')
proc = subprocess.Popen(cmdStr, shell=True, stderr=procLog, stdout=procLog)
proc.wait()
procLog.flush()
基于Adam Rosenfield's code,您可以
select.select
来阻止,直到有要读取的输出为止proc.stdout
或proc.stderr
请注意,以下命令写入
/tmp/test.log
,并运行命令ls -laR /tmp
。换衣服以满足你的需要。(PS:通常/tmp包含普通用户无法读取的目录,因此运行
ls -laR /tmp
将生成对stdout和stderr的输出。下面的代码在生成这两个流时正确地交织在一起。)编辑:
您可以将
stdout
和stderr
重定向到logfile = open('/tmp/test.log', 'a')
。 但是,这样做的一个小困难是,任何同时向/tmp/test.log
写入的日志处理程序都不会知道子进程正在写入什么,因此日志文件可能会被混淆。如果在子流程执行其业务时不进行日志记录调用,则唯一的问题是日志记录处理程序在子流程完成后在文件中的位置错误。那可以通过打电话来解决
因此处理程序将在文件末尾继续写入。
相关问题 更多 >
编程相关推荐