Как сделать так, чтобы вывод stdin и stdout отображался как в консоли, так и в файле журнала? - PullRequest
0 голосов
/ 06 января 2019

Следующий код распечатает вывод на консоль, а также в файл log.txt.

Код

import sys

class multifile(object):
    def __init__(self, files):
        self._files = files
    def __getattr__(self, attr, *args):
        return self._wrap(attr, *args)
    def _wrap(self, attr, *args):
        def g(*a, **kw):
            for f in self._files:
                res = getattr(f, attr, *args)(*a, **kw)
            return res
        return g

sys.stdout = multifile([ sys.stdout, open('log.txt', 'w') ])

name = input('What is your name: ')
print('Your name is',name)

Консольный вывод

C:\>python script.py
What is your name: ABC
Your name is ABC

log.txt файл

What is your name: Your name is ABC

К сожалению, ввод ABC\n отображался только на консоли, но не в файле log.txt.

Можно ли получить все как на консоль, так и на файл log.txt?

Желаемый вывод как в консоли, так и в log.txt файле

What is your name: ABC
Your name is ABC

Я хотел бы получить одинаковый (точный) вывод как в консоли, так и в файле log.txt?

Если есть более простой способ сделать это, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 06 января 2019

Не совсем уверен, что это то, что вы ищете, но посмотрите на этот вопрос здесь . Надеюсь, это поможет.

Кроме того, рекомендуется снова закрывать открытые файлы. Так что если вы в конечном итоге сохраните свой код, сделайте что-то вроде

f = open('log.txt', 'w') 
sys.stdout = multifile([ sys.stdout, f])

// do more stuff

f.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...