Можно ли получить доступ к stdout через обычное открытие / запись в Python - PullRequest
1 голос
/ 01 мая 2011

Я пытаюсь создать scipr, который включал бы запись на стандартный вывод или в файл.Возможно ли как-то написать каждому из них один и тот же фрагмент вместо использования print для stdou и io.write () для файлов?

Примеры обоих:

out_file = open("test.txt", "wt")
out_file.write("Text")
out_file.close()

и

print("Text", file=sys.stdout)

1 Ответ

1 голос
/ 02 мая 2011

это то, что вы хотите?

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, она открывает ее как новый файл

...