同时输出到控制台和文件

-1 投票
1 回答
32 浏览
提问于 2025-04-12 13:11

但是:

  1. 不能使用外部的命令,比如 | tee
  2. 不能新增函数,也不能改变语法,比如要继续使用 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!

撰写回答