2017-10-22 9 views
0

次の行は、stdoutsys.__stdout__からファイルに変更します。これは正常に動作します。stdoutをファイルと `sys .__ stdout__`の両方にリダイレクトする方法は?

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

はしかし、私は、ファイルにだけでなく、sys.__stdout__に出力したいです。追加する必要があるので、"test"は両方に書き込まれますか?

+0

。 –

+0

このような標準出力を置き換えることには注意してください。全体のポイントは、プログラムの* user *によって指定されたファイルハンドルであることです。ユーザーが要求したファイルに書き込むだけです。別のファイルに書きたい場合は、明示的に指定してください:出力を特定のファイルに出力するには 'print'に' file'引数を使います。 – chepner

+0

@chepnerそれでは、私は*置き換え*したくないのですが、*複製してそれをファイルに書きたいのです。それはあなたの警告を和らげますよね? – emmi474

答えて

2

writeメソッドが両方の場所にデータを送信し、sys.stdoutとしてインストールする独自のファイル形式のオブジェクトを作成できます。

+0

意味がありますが、複雑に聞こえます。可能であれば私はもっと簡単な解決策を探していました。私はまだ初心者です。 – emmi474

1

は、あなたはそれをシンプルに保つとsys.stdoutを変更しないようにするには、このような何かを行うことができます:あなたは、UNIXシステムにしている場合は、パイプstdoutが__tee__すると、それはあなたのためにそれの世話をする

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 ")'は単なる例示に過ぎません。私は 'stderr'と' stdout'で同じことをする予定です。私はすべての出力を制御できないかもしれません。 – emmi474

+0

@ emmi474 'write_out'と' write_err'のバリエーションがあります。 –

関連する問題