Python子进程仅在cron中返回非零退出状态


问题内容

我有一个Python脚本,可以管理一系列CasperJS任务并处理结果。它在命令行中运行良好,但是当我在cron中运行脚本时,出现错误:

CalledProcessError: Command '['/path/to/casperjs', '/path/to/doSomething.js', 'args']' returned non-zero exit status 1

在Python中,我称CasperJS:

response = subprocess.check_output(['/path/to/casperjs', '/path/to/doSomething.js', 'args'], shell=True)

我曾尝试shell=FalsePopen好,但我得到了相同的结果。我还尝试将整个命令设置为字符串(而不是列表),但这也无济于事。

'/path/to/casperjs /path/to/doSomething.js args'在shell中运行时,运行返回退出代码0。

我也将添加PATH=/usr/bin:/bin:/sbin:/usr/local/bin到我的crontab中无济于事。(如该问题所建议。)

有什么想法为什么我只会在cron中出现此错误?谢谢!!

编辑: 按照下面的答案,设置shell=Falsestderr=subprocess.STDOUT取得的一切工作…


问题答案:

您应该尝试除了stdout之外还捕获stderr,以便可以准确找出程序失败的原因(假设它确实为您打印了一些错误)

cmd = ['/path/to/casperjs', '/path/to/doSomething.js', 'args']
response = subprocess.check_output(cmd, 
                shell=True,
                stderr=subprocess.STDOUT)