I have a function that I cannot edit and it prints results onto the console. Is it possible to calls that function but pipes the console output into a file without changing the internal code of the function?
For example, I have:
def somefunc(x):
print "Hello World", x**x
def pipeout(func, outfilename)
with open('outfilename', 'w') as fout:
# somehow pipes out the output...
I couldn't use logger
because I couldn't edit the somefunc()
.
I have tried @Aशwini चhaudhary 's solution but i couldn't the files were empty other than the first outputfile and also it overwrites that file again and again.:
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)