以下行將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