Python でメッセージを出力するプログラムを作成しました。このプログラムをバックグラウンドで実行し、そのメッセージをファイルに出力したいのですが、bash で次のように記述しました。python program > message &
問題: プログラムを中断したときにのみ、メッセージが表示されます (cat または vi を使用)。どこに問題があるのか、簡単な解決策があるか、どなたか説明していただけますか?
答え1
Python は、出力が tty ではない場合にフルバッファリングを使用します。
--を使用してプログラムを実行するpython -u
と、python3 では stdout と stderr がバッファリングされず、python2 では stdin もバッファリングされません。
これはバックグラウンドで実行されているプログラムとは関係なく、その stdout が tty ではないという事実と関係があることに注意してください。
答え2
flushがお役に立てるでしょうか?他のサイトへのリンクが問題にならないことを願っています。https://stackoverflow.com/questions/230751/how-to-flush-output-of-print-function