Я пытаюсь создать scipr, который позволит либо записывать на stdout, либо в файл. Можно ли как-то писать каждому через один и тот же фрагмент вместо того, чтобы использовать для печати файлы stdou и io.write()?
Примеры обоих:
out_file = open("test.txt", "wt")
out_file.write("Text")
out_file.close()
и
print("Text", file=sys.stdout)
это то, что вы хотите?
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' в функцию и сначала попытаться взять ее как файл (из системы или ранее открытую), если он вызывает имяEnror, он открывает его как новый файл