2013-08-18 47 views
1

我在Django中做了一個自定義的命令,在那裏向stdout進行一些輸出。 如何攔截stdout進行一些更改(例如添加前綴)並寫入stderr? 這是測試任務,所以不要關注問題的不合邏輯性。如何攔截Python中stdout的內容?

回答

3

您可以使用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

另見:

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') 

演示:

[email protected]:~/py$ python so.py &> foo.txt 
[email protected]:~/py$ cat foo.txt 
stderr: Some text 
stdout: Some text