2012-02-04 101 views
2

我試圖將導入的另一個模塊的功能 的打印輸出存儲爲字符串並將其寫入文件。但是,該函數不返回一個字符串,它只打印輸出。 所以我需要的東西,如:Python:存儲來自不同模塊功能的打印輸出

import someModule 
...... 
f.open('test.v','w') 
out = storetheprintoutputasstring(someModule.main()) 
f.write(out) 
f.close 

我該怎麼辦呢? 請幫助我,並提前感謝您

+3

聽起來類似於http://stackoverflow.com/questions/1218933/can-i-redirect-the-stdout-in-python-into-some-sort-字符串緩衝區 – MatthewD 2012-02-04 08:40:53

+2

如果您正在使用基於Unix的操作系統,只需使用輸出重定向即可。 '$ python someModule.py> output_file.txt' 如果沒有,那麼你會想從標準輸入讀入並寫入你的文件。 我正在假設您不需要動態完成此操作。 – batbrat 2012-02-04 08:41:51

+0

我需要這個在python文件中完成,而不是在shell中。 – CosmicRabbitMediaInc 2012-02-04 09:02:49

回答

8

我認爲你要做的是有點破解,所以我認爲你這樣做。

這裏是你可以如何使用with聲明重定向stdout到一個文件:

import sys 
from contextlib import contextmanager 

@contextmanager 
def redirected(stdout): 
    saved_stdout = sys.stdout 
    sys.stdout = open(stdout, 'w') 
    yield 
    sys.stdout = saved_stdout 

with redirected(stdout='file.txt'): 
    print 'Hello' 
print 'Hello again' 
+0

我會添加'try:yield;最後:...'。 – reclosedev 2012-02-04 10:19:01

+0

這就是thanx! – CosmicRabbitMediaInc 2012-02-04 10:29:06

2

mod1.py:

def main(): 
    print "BOHOO" 

mod2.py:

import sys 
from StringIO import StringIO 
import mod1 

def storetheprintoutputasstring(func): 
    saved_stdout = sys.stdout 
    sys.stdout = mystdout = StringIO() 
    func() # Call function 
    sys.stdout = saved_stdout 
    return mystdout.getvalue() 

f = open('test.v','w') 
out = storetheprintoutputasstring(mod1.main) 
f.write(out) 
f.close() 

運行python mod2.py

test.v包含:

BOHOO