在cron运行时获取subprocess.Popen stdout

时间:2018-06-14 15:13:41

标签: python linux cron 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 个答案:

答案 0 :(得分:0)

问题不是cron而是shell=True 显然,当使用shell=True时,popen需要单个字符串而不是列表 所以当我更新我的电话时:

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