以下行将stdout
从sys.__stdout__
更改为文件。这工作正常。如何将stdout重定向到文件和`sys .__ stdout__`?
import sys
sys.stdout = open("stdout.txt", "a")
print("test")
但是,我想输出到文件以及sys.__stdout__
。我需要添加如何将"test"
写入两者?
以下行将stdout
从sys.__stdout__
更改为文件。这工作正常。如何将stdout重定向到文件和`sys .__ stdout__`?
import sys
sys.stdout = open("stdout.txt", "a")
print("test")
但是,我想输出到文件以及sys.__stdout__
。我需要添加如何将"test"
写入两者?
您可以制作自己的文件类对象,其write
方法将数据发送到两个位置并将其安装为sys.stdout
。
有道理,但听起来很复杂。如果可能的话,我正在寻找更简单的解决方案。我仍然只是一个初学者。 – emmi474
你可以做这样的事情,以保持它的简单,并避免修改sys.stdout
:
import sys
my_log = open('log.txt', 'a')
def write_out(data):
print(data, file=sys.stdout)
my_log.write(data + '\n')
def write_err(data):
print(data, file=sys.stderr)
my_log.write(data + '\n')
def main():
write_out('test out')
write_err('test err')
只有在您控制所有输出代码时才有效。当然,如果这是一个XY问题,那可能是正确的。 –
我的print(“test”)只是一个例子。我打算用'stdout'和'stderr'做同样的事情。我可能无法控制所有输出。 – emmi474
@ emmi474你可以有'write_out'和'write_err'的变体。 – 2017-10-22 01:23:13
如果你是在UNIX系统上,管标准输出到__tee__,它会照顾它。 –
请谨慎取代像这样的标准输出。重点在于它是由程序的*用户*指定的文件句柄;您只是写入用户请求的文件。如果要写入不同的文件,请明确指出:使用'file'参数来指定输出到特定文件。 – chepner
@chepner这就是为什么我不想*替换*它,而是*复制*并将它写入文件的原因。这安抚你的警告,对吧? – emmi474