Можно ли получить доступ к stdout через обычное открытие / запись в Python

1

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

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

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

и

print("Text", file=sys.stdout)
  • 2
    Вы можете передать любой файловый объект в качестве аргумента файла печати, в чем проблема?
  • 0
    Как я могу передать его через строку? при хранении sys.stdout / file в строке будет записано AttributeError: объект 'str' не имеет атрибута 'write'. Не уверен, как преобразовать его в файл-подобный объект
Показать ещё 1 комментарий
Теги:
file-io
stdout

1 ответ

1
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню