为了账号安全,请及时绑定邮箱和手机立即绑定

对 Python 脚本进行 deamonizing 后无法读取外部命令的 stdout 输出

对 Python 脚本进行 deamonizing 后无法读取外部命令的 stdout 输出

九州编程 2021-08-05 18:02:55
我foo用 Python写了一个 RPC 服务器,我用它去妖魔化了start-stop-daemon --start --quiet --background \                   --make-pidfile \                   --pidfile /var/run/foo.pid \                   -- /opt/foo一切正常,除了在我的守护进程中每次使用subprocess.check_call(some_cmd)或os.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)现在的输出是空的。
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-08-05
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

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

设置此变量后,OpenRC init 脚本不会向 stdout 打印任何内容。一个简单的

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

解决了这个问题。


查看完整回答
反对 回复 2021-08-05
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号