Python sys.stdout在init.d脚本中无法工作

3

我有一个非常简单的问题。一个以以下代码开始的Python脚本:

import sys
sys.stdout = open("server.out", 'w')

如果我直接在终端输入这个命令
python start_server.py &

它会写入 server.out 文件。如果我输入命令 service tdserver start,那么所有 init.d 脚本需要做的就是这样:
python start_server.py &

相同的命令,没有其他的东西。然而,在这种情况下,stdout 没有被写入到 server.out。为什么?没有进程锁定该文件,并且使用 ps -aux 确认脚本已停止。

1
请尝试使用完整路径来指定文件名,例如 open("/tmp/server.out",'w'),并检查您是否可以在 /tmp 目录下找到该文件。 - Yaron
它解决了我的问题。我想知道默认的执行目录会是什么。请将其作为答案添加,以便我可以接受。 - Rápli András
2个回答

2
默认情况下,init.d服务的工作目录是/etc/init.d,请参见如何在其所在的目录中执行任意脚本?
解决方案:
  1. 在Python代码中使用绝对路径,如评论中所提到的。
  2. 在通过python start_server.py &启动Python脚本之前,通过简单的cd /your/path/更改工作目录。
希望这可以帮助您!

2

如评论中所讨论:

您正在将输出写入到当前目录中的server.out

init.d当前目录为/etc/init.d(由linusg提到)。

对于输出文件,使用绝对路径(到可写位置)将解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接