2012-04-08 107 views
6

我有一个Python脚本,用于管理一系列CasperJS任务并处理结果。它在命令行中运行良好,但是当我运行在cron脚本,我得到的错误:Python子进程仅在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无济于事。 (如this question所示。)

任何想法,为什么我只在cron中出现此错误?谢谢!!

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

回答

8

你应该尝试捕捉标准错误除了标准输出,这样就可以找出到底是为什么程序失败的(假设它确实打印一些错误你)

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

我补充一点,对于“此命令的工作中最常见的原因,当我手动而不是运行在cron下/主管/新贵/ .. 。“是一个环境变量 - 并不总是PATH--是不同的或者是missin G。 – mattbornski 2012-04-08 21:00:06

+1

是的,我正在检查所有的环境变量,但设置'shell = False'并添加'stderr = subprocess.STDOUT',现在一切都变魔术般的工作?! – arboc7 2012-04-08 21:02:28

+0

@mattbornski:雅我同意。它的要么是,要么是这个过程在crontab设置的任何用户下运行都会遇到问题。我不想猜测太多,而是试着弄清楚真正的错误可能是什么 – jdi 2012-04-08 21:03:45