如何在Python中拦截stdout的内容?

时间:2013-08-18 11:20:58

标签: python django

我在Django中创建一个自定义命令,其中输出到stdout。 我如何拦截stdout进行一些更改(例如添加前缀)并写入stderr? 这是测试任务,所以不要注意问题的不合逻辑性。

2 个答案:

答案 0 :(得分:5)

您可以像这样使用StringIO

from StringIO import StringIO
import sys

old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()

print("test")

sys.stdout = old_stdout

s = mystdout.getvalue()
s = "prefix" + s

sys.stderr.write(s)

代码将stdout捕获到缓冲区中,然后读取缓冲区,添加prefix并写入stderr

另见:

答案 1 :(得分:0)

您可以使用sys.stdoutsys.stderr

from sys import stdout, stderr
output_text = "Some text"
stdout.write('stdout: ' + output_text + '\n')
stderr.write('stderr: ' + output_text + '\n')

<强>演示:

monty@xonix:~/py$ python so.py &> foo.txt
monty@xonix:~/py$ cat foo.txt
stderr: Some text
stdout: Some text