0

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)现在是空的。

4

2 回答 2

1

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

于 2018-11-05T05:53:51.733 回答
0

我自己解决了。问题是在使用标志运行时start-stop-daemon设置环境变量(手册页中没有记录......)。EINFO_QUIET--quite

当设置此变量时,OpenRC 初始化脚本不会向标准输出打印任何内容。一个简单的

import os
os.environ["EINFO_QUIET"] = "NO"

解决问题。

于 2018-11-05T11:08:19.547 回答