我有以下shell脚本:
#!/bin/sh
exec 2>&1
echo "Starting ..."
python /home/services/example.py
python脚本只包含一个打印命令。上面的脚本是一个daemontools守护程序,并且还启用了一个简单的日志机制(multilog
)。但是,在main/log/current
中我看到了“Starting ...”行,但没有看到python脚本中的打印命令。
我在通话时做错了还是忘记了什么?
修改 我试图运行的python脚本是:
from time import sleep
import sys
sys.stdout.write("Hello World")
print "Hello World"
while 1:
sys.stdout.write("Hello world")
sleep(10)
答案 0 :(得分:0)
反复运行
sys.stdout.write("Hello world")
...只创建一个Hello worldHello worldHello world
形式的巨大行,但不保证它会刷新。
在您编写的任何内容上隐藏新内容(如print
所示),并在直接使用sys.stdout.write()
时刷新缓冲区:
while 1:
sys.stdout.write("Hello world\n") # add a newline
sys.stdout.flush() # flush the buffer
答案 1 :(得分:0)
我也遇到了同样的问题。
解决方案是禁用输出缓冲。见Disable output buffering
在您的情况下,将您的daemontools运行脚本更新为:
python -u /home/services/example.py
-u标志禁用Python输出缓冲。