【发布时间】:2013-03-03 19:37:54
【问题描述】:
我正在编写一个研究工具,我最近从使用“打印”语句切换到使用 Python 中内置的记录器功能。我推断,除了将输出转储到屏幕之外,我还可以让用户选择将输出转储到文件中。
到目前为止一切顺利。我在 Python 中的代码部分使用“logger.info”和“logger.error”转储到屏幕和文件。 “logger”是模块范围的记录器。这部分就像一个魅力。
但是,在某些情况下,我使用“subprocess.call”通过 shell 运行可执行文件。所以,在整个代码中,我都有类似
的行proc = subprocess.call(command)
此命令的输出将一如既往地打印到屏幕上,但不会转储到用户指定的文件中。
一种可能的选择是打开文件的管道:
proc = subprocess.call(command, stdout=f, stderr=subprocess.OUTPUT)
但这只会转储到文件而不是屏幕上。
基本上,我的问题归结为:有没有一种方法可以利用我现有的记录器,而不必为专门用于 subprocess.call 的文件构建另一个处理程序? (也许通过将输出重定向到记录器?)或者这是不可能的,给定当前的设置?如果是后者,我该如何改进设置?
(哦,另外,如果日志记录是“实时”的,那就太好了,这样来自可执行文件的消息就会在收到时记录下来。)
感谢您的帮助! :)
【问题讨论】:
-
Lennart Regebro 的 StreamLogger class 将在您的情况下很好地工作。
-
感谢参考!这非常适合我的情况。