2017-03-21 13 views
1

私は私が手ファイルを尾行にITERM出力が適切に

{ cd /usr/local/path/to/code; echo "hi1"; sudo chmod 777 /tmp/dissolve.log; echo "hi2"; python someapp/runner.py dissolve; echo "hi3"; } > /tmp/dissolve.log & 

を通じてbashのコンソールで次のコマンドを通じ実行していますリダイレクトされ得ていませんpython someapp/runner.py dissolveの出力が得られない場合、cmd + cの出力は、tailログに出力されます。 runner.pyから

コードスニペット:

if __name__ == '__main__': 
    program_name = sys.argv[1] 
    if program_name == 'dissolve': 
     obj = SomeClass() # this is properly imported 
     obj.some_function() # this has lot of `print` statements, which i intened to catch in '/tmp/dissolve.log' 

/tmp/dissolve.log以外どこ他のいくつかの値を渡すsome_function()内部の初期printですか?

これがなぜ起こっているのでしょうか?

+0

バッファリングの問題のようです。 'obj.some_function()'の内部でバッファを定期的にフラッシュして、それが役立つかどうか確認できますか? pythonコマンドの前に 'stdbuf -oL'を付けて、行のバッファリングを強制することもできます。詳細については、[標準ストリームでのバッファリング](http://www.pixelbeat.org/programming/stdio_buffering/) – codeforester

答えて

1

出力をファイルに送信すると、これはbufferingのように見えます。

{ cd /usr/local/path/to/code; 
    echo "hi1"; 
    sudo chmod 777 /tmp/dissolve.log; 
    echo "hi2"; 
    stdbuf -oL python someapp/runner.py dissolve; 
    echo "hi3"; } > /tmp/dissolve.log & 
+0

'print'はまだ' tail'に入っていません... :(フラッシュする方法を探します – NoobEditor

+0

Pythonで関数を実行する前に 'sys.stdout.flush()'を追加しました!!: – NoobEditor

+0

Pythonスクリプトを別々に実行して出力をリダイレクトしないとどうなりますか? – codeforester

関連する問題