如何使stdin和stdout输出同时显示在控制台和日志文件中?

时间:2019-01-06 07:04:05

标签: python python-3.x windows

以下代码将输出输出到控制台以及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 :(得分:1)

不能完全确定这是否是您要查找的内容,但请查看此question here。希望有帮助。

此外,最好再次关闭打开的文件。因此,如果您最终保留了代码,请执行类似的操作

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

// do more stuff

f.close()