Python:存储来自不同模块功能的打印输出

时间:2012-02-04 08:28:59

标签: python

我正在尝试从导入的另一个模块的函数存储打印输出, 作为字符串并将其写入文件。但是,该函数不返回字符串,只打印输出。 所以我需要这样的东西:

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

我该怎么做? 请帮帮我,并提前感谢您

2 个答案:

答案 0 :(得分:8)

我认为你要做的事情有点像黑客,所以我假设你这样做。

以下是使用stdout语句将with重定向到文件的方法:

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'

答案 1 :(得分: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