это то, что вы хотите?
from __future__ import print_function, with_statement
def my_print(text, output):
if type(output) == str:
with open(output, 'w') as output_file:
print(text, file=output_file)
elif type(output) == file:
print(text, file=output)
else:
raise IOError
Мне кажется, я понимаю, может быть, это:
from __future__ import print_function, with_statement
def my_print(text, output):
if type(output) == str:
try:
output_file = eval(output)
assert type(output_file) == file
except (NameError, AssertionError):
output_file = open(output, 'w')
print(text, file=output_file)
output_file.close()
elif type(output) == file:
print(text, file=output)
else:
raise IOError
с этим вы можете передать строку 'sys.stdout' в функцию, и она сначала попытается взять ее как файл (из системы или ранее открытый), если она вызывает ошибку NameError, она открывает ее как новый файл