You can use a decorator to redirect the sys.stdout
to a file object when the function gets called and later restores it back to original STDOUT.
import sys
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
@redirect_output('file.txt')
def somefunc(x):
print "Hello World", x**x
somefunc(2)
print 'Hello to console.'
Output:
>>> %run so.py
Hello to console.
>>> !cat file.txt
Hello World 4
Update:
Working version of your latest code:
for i in xs:
outputfilename = 'results/'+str(i)
new_func = redirect_output(outputfilename)(somefunc)
#or call it directly
#redirect_output(outputfilename)(somefunc)(i)
new_func(i)