Pregunta

Ubuntu Server 9.10, Aquí está mi archivo, test.py

import commands
blkid = commands.getoutput('blkid')
print blkid

Al ejecutar manualmente (como SU) siguiente:

python test.py

Tengo la salida del blkid como se espera:

/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"

Sin embargo cuando agrego esto a mi crontab SU:

* * * * * python /home/myusername/test.py > /home/myusername/output

El contenido de salida se convierte en:

sh: blkid: not found

¿Qué me estoy perdiendo aquí? Python es el comandos módulo sólo para ciertos comandos SH-específicos? Sólo estoy trato de ejecutar un comando del sistema y capturar el resultado en una variable que pueda analizar.

¿Fue útil?

Solución

El problema es, probablemente, con su $PATH frente de raíz (os.environ['PATH'] si lo está mirando en Python en lugar de concha ;-). PATH de raíz es normalmente muy conservadores (sería arriesgado para que no se vean!) Y ya se está ejecutando blkid sin especificar una ruta absoluta que puede significar que es fácil en su camino, pero no de la raíz.

Lo mismo ocurre con which blkid como a ti mismo en una cáscara pronta, sudo su o la raíz de todos modos convertido, y echo $PATH - se puede verificar rápidamente el problema. A continuación, a solucionarlo mediante el uso de absoluta ruta completa de blkid en la llamada getoutput en lugar de sólo el identificador blkid desnudo mientras que está haciendo ahora.

Otros consejos

El medio ambiente (y PATH) de una tarea programada no es necesariamente el mismo que su shell de entrada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top