通过 cron 运行时获取 subprocess.Popen stdout

通过 cron 运行时获取 subprocess.Popen stdout

我想获取服务状态,如果未启动,则通过电子邮件发送状态(标准输出)。
该脚本计划由 cron 每小时运行一次。
手动运行时,以下工作正常:

def is_service_running(name):
with open(os.devnull, 'wb') as hide_output:
    proc = subprocess.Popen(['service', name, 'status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        output = proc.stdout.read()
        exit_code = proc.wait()
        return exit_code == 0, output

但是当通过 cron 运行时。output是空的。cron运行时
如何捕获?stdout谢谢

答案1

问题不是 cron 而是shell=True.
显然,当使用 时shell=True,popen 需要单个字符串而不是列表。
因此,当我将通话更新为:

proc = subprocess.Popen(['service ' + name + ' status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

一切顺利。

相关内容