次の行は、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
を変更しないようにするには、このような何かを行うことができます:あなたは、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')
すべての出力コードを制御する場合にのみ機能します。もちろん、これがXYの問題だったら、それは正しいかもしれません。 –
私の 'print(" test ")'は単なる例示に過ぎません。私は 'stderr'と' stdout'で同じことをする予定です。私はすべての出力を制御できないかもしれません。 – emmi474
@ emmi474 'write_out'と' write_err'のバリエーションがあります。 –
。 –
このような標準出力を置き換えることには注意してください。全体のポイントは、プログラムの* user *によって指定されたファイルハンドルであることです。ユーザーが要求したファイルに書き込むだけです。別のファイルに書きたい場合は、明示的に指定してください:出力を特定のファイルに出力するには 'print'に' file'引数を使います。 – chepner
@chepnerそれでは、私は*置き換え*したくないのですが、*複製してそれをファイルに書きたいのです。それはあなたの警告を和らげますよね? – emmi474