0

我有 3 个脚本。一个是starttest.py执行 in 中调用的方法test.py。方法定义在module.py.

每个文件中有许多打印语句,我想从Starttest.py文件本身捕获日志文件中的每个打印语句。我尝试sys.stdoutstarttest.py文件中使用,但这个函数只从starttest.py文件中获取打印语句。它没有任何控制test.pymodule.py文件打印语句。

有什么建议可以仅在一个地方从所有文件中捕获打印语句吗?

4

2 回答 2

1

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
于 2013-02-04T01:09:56.830 回答
0

也许看看python自带的日志模块

于 2013-02-04T01:08:43.083 回答