python-daemon不记录stdout重定向

uurv41yg  于 2023-04-04  发布在  Python
关注(0)|答案(4)|浏览(147)

我在我的代码中使用了python-daemon,其中包含print语句。我想将它们发送到一个文件,所以我运行了以下命令:

python server.py >> log.out

但是,log.out中没有任何内容。
有谁能告诉我该怎么做吗?
谢谢。

7qhs6swi

7qhs6swi1#

DaemonContext对象允许在创建对象时重定向stdout/stderr/stdin。例如:

import os
import daemon

if __name__ == '__main__':
    here = os.path.dirname(os.path.abspath(__file__))
    out = open('checking_print.log', 'w+')

    with daemon.DaemonContext(working_directory=here, stdout=out):
        for i in range(1, 1000):
            print('Counting ... %s' % i)

您应该能够cat checking_print.log并看到print语句的输出。
DaemonContext对象的一个很好的参考是PEP 3143

ioekq8ef

ioekq8ef2#

问题是python-daemon关闭了所有文件描述符,包括stdout

files_preserve = [sys.stdout]

给你的DaemonContext调用。

xpcnnkqh

xpcnnkqh3#

如果你的代码中有错误,它将不会被写入文件。参见http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
尝试创建此文件:

print 'stdout'
raise Exception('stderr')
gcuhipw9

gcuhipw94#

如果它已经作为守护进程运行,你很可能需要强制重定向STDOUT、STDERR等。

python server.py 2>log.out >&2

相关问题