为什么我不能将 python 脚本的标准输出重定向到文件
Why can't I redirect stdout of a python script to a file
我正在 Raspberry Pi 2 (Raspbian) 上使用 rc.local
中的命令开始我的服务 运行,如下所示:
python3.4 /home/pi/SwitchService/ServiceStart.py >/home/pi/SwitchService/log &
python3.4 /home/pi/test.py >/home/pi/log2 &
由于某些原因,尽管脚本打印到标准输出,但我在服务的日志文件中看不到任何文本。
这两个脚本如下所示:
test.py
print("Test")
ServiceStart.py
from Server import Server
print("Test")
if __name__ == "__main__":
server = Server()
因为我无法使用 bash 解决方案,所以我尝试了 this other solution 是否对我有用。它的行为与基于 bash 的方法完全相同。因此,尽管创建了空文件,但我的服务没有向日志文件写入任何内容。
首先,确保您的脚本确实是 运行。许多调度程序和启动例程没有设置 PATH
,因此它可能找不到 python3.4
。尝试修改命令以包含完整路径(例如 /full/path/python3.4
)。
其次,不建议在 rc.local
中包含长 运行 脚本,而没有 运行 它们在后台(the documentation 甚至说明了这一点)。 Raspberry Pi 在继续引导之前等待命令完成,因此如果它永远运行,您的 Raspberry Pi 可能永远无法完成引导。
最后,假设前两个问题已得到解决,请确保您的程序不会过度缓冲输出。您可以尝试 flushing stdout 看看是否有帮助。
我正在 Raspberry Pi 2 (Raspbian) 上使用 rc.local
中的命令开始我的服务 运行,如下所示:
python3.4 /home/pi/SwitchService/ServiceStart.py >/home/pi/SwitchService/log &
python3.4 /home/pi/test.py >/home/pi/log2 &
由于某些原因,尽管脚本打印到标准输出,但我在服务的日志文件中看不到任何文本。
这两个脚本如下所示:
test.py
print("Test")
ServiceStart.py
from Server import Server
print("Test")
if __name__ == "__main__":
server = Server()
因为我无法使用 bash 解决方案,所以我尝试了 this other solution 是否对我有用。它的行为与基于 bash 的方法完全相同。因此,尽管创建了空文件,但我的服务没有向日志文件写入任何内容。
首先,确保您的脚本确实是 运行。许多调度程序和启动例程没有设置 PATH
,因此它可能找不到 python3.4
。尝试修改命令以包含完整路径(例如 /full/path/python3.4
)。
其次,不建议在 rc.local
中包含长 运行 脚本,而没有 运行 它们在后台(the documentation 甚至说明了这一点)。 Raspberry Pi 在继续引导之前等待命令完成,因此如果它永远运行,您的 Raspberry Pi 可能永远无法完成引导。
最后,假设前两个问题已得到解决,请确保您的程序不会过度缓冲输出。您可以尝试 flushing stdout 看看是否有帮助。