Python:从后台子进程获取stdout

时间:2017-08-01 08:19:14

标签: python linux shell background subprocess

我正在尝试使用python脚本在linux机器上获取网络接口的信息,即'ifconfig -a eht0'。所以我使用以下代码:

import subprocess
proc = subprocess.Popen('ifconfig -a eth0', shell=True, stdout=subprocess.PIPE)
proc.wait()
output = proc.communicate()[0]

如果我使用

从终端执行脚本
python myScript.py

python myScript.py &

它运行正常,但是当它从背景(由crontab启动)运行而没有活动shell时,我无法获得输出。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:1)

您是否尝试使用“屏幕”?

proc = subprocess.Popen('screen ifconfig -a eth0', shell=True, stdout=subprocess.PIPE)

我不确定它是否可行。

答案 1 :(得分:0)

尝试proc.stdout.readline()而不是通信,也可以帮助subprocess.Popen()中的stderr = subprocess.STDOUT。请发布结果。

答案 2 :(得分:0)

我找到了问题的解决方案,我想系统在crontab执行时无法识别函数ArrayIndexOutOfBoundsException。因此,添加子进程的完整路径可以使脚本正确执行:

builder.setContentTitle(title);
notificationManager.notify(0, builder.build());

现在我可以管理输出字符串了。

由于