我有 3 个脚本。一个是starttest.py
执行 in 中调用的方法test.py
。方法定义在module.py
.
每个文件中有许多打印语句,我想从Starttest.py
文件本身捕获日志文件中的每个打印语句。我尝试sys.stdout
在starttest.py
文件中使用,但这个函数只从starttest.py
文件中获取打印语句。它没有任何控制test.py
和module.py
文件打印语句。
有什么建议可以仅在一个地方从所有文件中捕获打印语句吗?
我有 3 个脚本。一个是starttest.py
执行 in 中调用的方法test.py
。方法定义在module.py
.
每个文件中有许多打印语句,我想从Starttest.py
文件本身捕获日志文件中的每个打印语句。我尝试sys.stdout
在starttest.py
文件中使用,但这个函数只从starttest.py
文件中获取打印语句。它没有任何控制test.py
和module.py
文件打印语句。
有什么建议可以仅在一个地方从所有文件中捕获打印语句吗?
test.py
在从or导入任何内容之前module.py
,将 tyesys.stdout
文件对象替换为您喜欢的对象之一:
import sys
sys.stdout = open("test-output.txt", "wt")
# Import the rest
如果您在类 Unix 操作系统上运行,则有一种更安全的方法,不需要替换文件对象引用。特别是因为覆盖sys.stdout
并不能保证先前的对象被销毁:
import os
import sys
fd = os.open("test-output.txt", os.O_WRONLY | os.O_CREAT, 0644)
os.dup2(fd, sys.stdout.fileno())
os.close(fd)
请注意,几乎所有 Python 的守护进程实现都使用上述技巧。
即使没有直接关系,也请记住,您可以使用 shell 将命令输出重定向到文件(也适用于 Windows):
python starttest.py >test-output.txt
也许看看python自带的日志模块