3

upstartジョブとして実行すると、python2.6スクリプトのstdout出力をファイルに保存するのに苦労しています。

これは私の現在のテストスクリプトです:

#!/usr/bin/python
from time import sleep
import sys

while 1:
    print "Hello from stdout"
    print >> sys.stderr, "Hello from stderr"
    sleep(1)

私がそうすればそれはうまくいきます$ myscript >> /var/log/myscript。両方見えます。

ただし、起動スクリプトとして、次のconfを使用すると

  1. /etc/init/myscript.conf:

    exec /path/to/myscript >> /var/log/myscript 2>&1
    

    私はこれを見る:

    Hello from stderr
    Hello from stderr
    Hello from stderr
    Hello from stderr
    Hello from stderr
    Hello from stderr
    

stderrとstdoutに別のファイルを使用すると、両方が作成されますが、stdoutは常に空です。

私は何が間違っているのですか?

4

1 に答える 1

3

バッファリングとフラッシングが推測になります。

stderrは通常、バッファリングされていないストリームですが、stdoutはバッファリングされています。ファイルに送信すると、4kチャンクでバッファリングされます(通常)。

次の変更を行った場合:

while 1:
    print "hello from stdout"
    sys.stdout.flush()
    print >> sys.stderr, "Hello from stderr"
    sleep(1)

ファイルに出力が表示されるはずです。

于 2011-11-28T18:06:48.927 に答える