【发布时间】:2012-05-19 05:54:27
【问题描述】:
对于我当前的项目,我需要找到一种方法将依赖于标准输出的版本或至少一个格式化的标准输出写入日志文件。 目前我只是在使用 subprocess.Popen(exec, stdout=log),它将它写入一个未格式化的文件。
我的最佳想法是即时格式化输出,方法是截取标准输出,将其重新路由到自定义模块,并使用 if 和 elif 的组合将自己的字符串写入日志。但是我在文档中找不到任何关于如何在 Python 3 中执行此操作的方法。我能找到的最合适的答案是在this question,接受的答案已经很接近了。
但我只是不明白我应该如何构建应该用作 stdout=class 的类。这些方法中的哪一种接收输入(以及它是如何格式化的)?这些方法中哪些是必要的?或者甚至可能有一种更简单的方法来完成我想做的事情?
【问题讨论】:
-
您是否考虑过使用日志记录模块?您将 sys.stdout 设置为您想要的任何文件描述符,而不产生子进程。
sys.stdout = open('somefile', 'a') -
嗯,日志记录模块不适合我的项目,因为它基本上只是一个调用预编译可执行文件的脚本,这就是我想要更改/格式化标准输出的原因。将可执行文件作为子进程打开对我来说更可靠,并且标准输出当前已经进入文件(日志),但是 - 如前所述 - 未格式化。
标签: python logging python-3.x stdout logfiles