2012-04-08 12 views
6

Tengo un script de Python que gestiona una serie de tareas CasperJS y procesa el resultado. Se ejecuta bien desde la línea de comandos, pero cuando ejecuto el script en cron, me sale el error:El subproceso de Python devuelve un estado de salida distinto de cero en cron

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

En Python, llamada:

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

He tratado shell=False y Popen como bien, pero obtengo el mismo resultado. También intenté hacer que el comando completo fuera una cadena (en lugar de una lista), pero eso tampoco ayudó.

Corriendo '/path/to/casperjs /path/to/doSomething.js args' devuelve el código de salida 0 cuando se ejecuta en el shell.

También he agregado PATH=/usr/bin:/bin:/sbin:/usr/local/bin a mi crontab en vano. (Como se sugiere en this question.)

¿Alguna idea de por qué solo obtengo este error en cron? ¡¡Gracias!!

EDIT: De acuerdo con la respuesta a continuación, establecer shell=False y stderr=subprocess.STDOUT trabajo todo lo hecho ...

Respuesta

8

Usted debe tratar de capturar stderr, además de la salida estándar para que pueda saber exactamente por qué el programa es no (suponiendo que en efecto, imprimir algunos errores para usted)

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

voy a añadir a esto que la razón más común para las "obras de este comando al ejecutarlo manualmente, pero no bajo cron/Supervisor/advenedizo/.. . "es una variable de entorno - no siempre PATH - es diferente o se pierde gramo. – mattbornski

+1

Sí, estaba comprobando todas las variables de entorno, pero estableciendo 'shell = False' y agregando' stderr = subprocess.STDOUT' y ahora todo funciona mágicamente? !! – arboc7

+0

@mattbornski: Ya estoy de acuerdo. Es eso, o tal vez el proceso tiene problemas para ejecutarse bajo cualquier usuario que esté configurado como crontab. No quería especular demasiado, sino intentar averiguar cuál podría ser el verdadero error – jdi

Cuestiones relacionadas