2012-04-08 135 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

相關問題