2017-10-22 76 views
0

以下行将stdoutsys.__stdout__更改为文件。这工作正常。如何将stdout重定向到文件和`sys .__ stdout__`?

import sys 
sys.stdout = open("stdout.txt", "a") 
print("test") 

但是,我想输出到文件以及sys.__stdout__。我需要添加如何将"test"写入两者?

+0

如果你是在UNIX系统上,管标准输出到__tee__,它会照顾它。 –

+0

请谨慎取代像这样的标准输出。重点在于它是由程序的*用户*指定的文件句柄;您只是写入用户请求的文件。如果要写入不同的文件,请明确指出:使用'file'参数来指定输出到特定文件。 – chepner

+0

@chepner这就是为什么我不想*替换*它,而是*复制*并将它写入文件的原因。这安抚你的警告,对吧? – emmi474

回答

2

您可以制作自己的文件类对象,其write方法将数据发送到两个位置并将其安装为sys.stdout

+0

有道理,但听起来很复杂。如果可能的话,我正在寻找更简单的解决方案。我仍然只是一个初学者。 – emmi474

1

你可以做这样的事情,以保持它的简单,并避免修改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') 
+0

只有在您控制所有输出代码时才有效。当然,如果这是一个XY问题,那可能是正确的。 –

+0

我的print(“test”)只是一个例子。我打算用'stdout'和'stderr'做同样的事情。我可能无法控制所有输出。 – emmi474

+0

@ emmi474你可以有'write_out'和'write_err'的变体。 – 2017-10-22 01:23:13

相关问题