首页 > 解决方案 > 对 Python 脚本进行去魔化后,无法读取外部命令的标准输出输出

问题描述

foo我用 Python编写了一个 RPC 服务器

start-stop-daemon --start --quiet --background \
                  --make-pidfile \
                  --pidfile /var/run/foo.pid \
                  -- /opt/foo

一切正常,除了每次使用subprocess.check_call(some_cmd)oros.popen(some_cmd).read(1048576)在我的守护程序中返回一个空字符串与我foo在前台启动时的情况相比。

外部程序some_cmd仍然成功执行(正如我在日志中看到的那样),但我无权访问它打印到标准输出的内容。

为什么会这样?为了解决这个问题,我可以对start-stop-daemon调用或我的 Python 代码进行哪些更改?

PS:我发现现在只有某些命令的输出是空的:subprocess.check_output('echo "Hello World"', shell=True)仍然正常运行,而输出subprocess.check_output('/etc/init.d/apache2 --nocolor reload', shell=True)现在是空的。

标签: pythonlinuxpython-3.xdaemonstart-stop-daemon

解决方案


从问题的标题来看,如果是尝试访问标准输出,那么如果进程有终端是可能的。当被妖魔化时,没有终端。


推荐阅读