在新手工作中从python捕获stdout

时间:2011-11-28 18:03:40

标签: python stdout 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
    
  2. 如果我为stderr和stdout使用不同的文件,它们都被创建,但是stdout总是空的。

    我做错了什么?

1 个答案:

答案 0 :(得分:3)

缓冲和冲洗就是猜测。

stderr通常是无缓冲的流,而stdout是缓冲的。当您将其发送到文件时,它将以4k块(通常)进行缓冲。

如果进行以下更改:

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

您应该在文件中看到输出。