3

当我将 python2.6 脚本的标准输出作为新贵作业运行时,我正在努力将其保存到文件中。

这是我当前的测试脚本:

#!/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,效果很好。我都看到了。

但是,作为一个新贵脚本,如果我使用以下配置

  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 回答