理解监督记录;stdout仅显示stderr消息

理解监督记录;stdout仅显示stderr消息,stdout,stderr,supervisord,Stdout,Stderr,Supervisord,我有一个非常简单的python程序,我正在supervisord中运行 除了程序部分之外,supervisord.conf是完全默认的: [program:logwatcher] command=/path/to/python -u "/path/to/logwatcher.py" python代码: import sys print("print\n") print("file=sys.stdout\n", file=sys.stdout) print("file=sys.stderr\n

我有一个非常简单的python程序,我正在supervisord中运行

除了程序部分之外,supervisord.conf是完全默认的:

[program:logwatcher]
command=/path/to/python -u "/path/to/logwatcher.py"
python代码:

import sys

print("print\n")
print("file=sys.stdout\n", file=sys.stdout)
print("file=sys.stderr\n", file=sys.stderr)
sys.stdout.write("sys.stdout.write\n")
sys.stderr.write("sys.stderr.write\n")
生成此输出:

supervisor> tail logwatcher
print
file=sys.stdout
sys.stdout.write

supervisor> tail logwatcher stdout
file=sys.stderr
sys.stderr.write

supervisor> tail logwatcher stderr
file=sys.stderr
sys.stderr.write
为什么
tail stdout
只显示stderr消息,而不显示stdout消息

为什么
tail stdout
显示stderr

如果
tail
应该模仿
tail stdout
为什么它们不匹配


在supervisor 3.3.5和supervisor 4.0.1上进行测试

哪一部分让您特别困惑
print
通常打印到
sys.stdout
(即
print()
print(file=sys.stdout)
通常会执行相同的操作,除非由于某种原因被覆盖(这是非常罕见的).
sys.stderr
是打印错误的地方。例如,如果您执行了
raisevalueerror
,则生成的消息将打印到
sys.stderror
。对于您的典型用户
stderror
stdout
我们通常不使用;但是,一些程序出于日志记录目的重定向这些流。下面是一个示例重定向的例子很多:为什么tail stdout只显示stderr消息,而不显示stdout消息?为什么tail stdout显示stderr?如果tail应该模拟tail stdout,为什么它们不匹配?什么是“tail”有趣。你能把
flush=True
添加到你的打印语句中,看看打印的是什么吗?假设你使用的是python3.3+。什么部分让你特别困惑?
print
通常打印到
sys.stdout
(即
print()
print(file=sys.stdout)
通常会执行相同的操作,除非由于某种原因被重写(这是非常罕见的).
sys.stderr
是打印错误的地方。例如,如果您执行了
raisevalueerror
,则生成的消息将打印到
sys.stderror
。对于您的典型用户
stderror
stdout
我们通常不使用;但是,一些程序出于日志记录目的重定向这些流。下面是一个示例重定向示例:为什么tail stdout只显示stderr消息,而不显示stdout消息?为什么tail stdout显示stderr消息?如果tail应该模拟tail stdout,为什么它们不匹配?什么是“tail”?很有趣。你能在print语句中添加
flush=True
,看看打印的内容吗?假设你使用的是python3.3+。