我有一个无法编辑的功能,它会将结果打印到控制台上。是否可以调用该函数但将控制台输出通过管道传输到文件而不更改函数的内部代码?
例如,我有:
def somefunc(x):
print "Hello World", x**x
def pipeout(func, outfilename)
with open('outfilename', 'w') as fout:
# somehow pipes out the output...
我无法使用logger
,因为我无法编辑somefunc()
.
我已经尝试过@Aशwini चhaudhary 的解决方案,但除了第一个输出文件之外,我不能其他文件是空的,而且它一次又一次地覆盖该文件。:
def redirect_output(file_name):
def decorator(func):
def wrapper(*args):
with open(file_name, 'w') as f:
original_stdout = sys.stdout
sys.stdout = f
func(*args)
sys.stdout = original_stdout
return wrapper
return decorator
def somefunc(x):
print x*x
xs = [1,2,3,4]
for i in xs:
outputfilename = 'results/'+str(i)
somefunc = redirect_output(outputfilename)(somefunc)
somefunc(i)