同时输出到控制台和文件
但是:
- 不能使用外部的命令,比如
| tee
。 - 不能新增函数,也不能改变语法,比如要继续使用
print()
这个写法。
1 个回答
0
你可以创建一个自定义的类,这个类里面有一个 .write(string)
方法。然后你可以把这个类的实例作为 file=
参数传给 print
函数。这个类会在内部处理对 .write()
的调用,把相同的内容写入多个其他的文件对象。
下面是一个实现的例子:
import sys
from typing import TextIO
class MultiTextIO:
def __init__(self, *fds: TextIO):
self.fds = fds
def write(self, b, /):
for fd in self.fds:
fd.write(b)
fp = open(sys.argv[1] if 1 < len(sys.argv) else "output.txt", "w")
multi_output_io = MultiTextIO(sys.stdout, fp)
print("Hello, World!", file=multi_output_io)
下面是一个使用的例子:
$ python output2.py
Hello, World!
$ cat output.txt
Hello, World!