我有 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自带的日志模块