python - 对 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)
现在是空的。
解决方案
从问题的标题来看,如果是尝试访问标准输出,那么如果进程有终端是可能的。当被妖魔化时,没有终端。
推荐阅读
- java - 并行使用蒙特卡罗方法计算 Pi
- python - 虽然循环不能识别多个条件
- reactjs - 符号 &tagname 的含义:用于材质 UI 中的 css 样式。例如:&div: { display: 'flex' '}
- git - 有没有办法使用 microdnf 将 git 安装到 RedHat ubi 8 最小映像中并解决安装 shadow-utils 的错误?
- php - 如何在 Perl 文件中检索 PHP 会话?
- symfony - LANG 变量在测试环境中未被覆盖
- powershell - 使用模式 [Powershell] 重命名目录上的所有文件
- gdb - 使用带有别名的 gdb 运行 python 脚本
- javascript - 在threejs中使用toneMapping时如何避免背景图像由白色变为灰色?
- flutter - 在 Flutter 中将文件保存到下载时出错