2017-10-22 75 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

相關問題