Domanda

Ubuntu Server 9.10, Ecco il mio file, test.py

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

Quando ho eseguire manualmente (come SU) questo:

python test.py

Ho l'uscita del il comando blkid come previsto:

/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"

Tuttavia, quando mi aggiungi questo al mio SU crontab:

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

Il contenuto di uscita diventa:

sh: blkid: not found

Quello che mi manca qui?È il Python comandi modulo solo per alcune SH-comandi specifici?Sto solo tenta di eseguire un comando di sistema e catturare l'output in una variabile che posso analizzare.

È stato utile?

Soluzione

Il problema è probabilmente con il $PATH contro il root (os.environ['PATH'] se stai guardando in Python piuttosto che shell;-).il PATH di root è in genere molto conservatore (sarebbe rischioso per NON essere!) e dal momento che si sta eseguendo blkid senza specificare un percorso assoluto che si può facilmente dire che è sul vostro CAMMINO, ma non di root.

In modo da fare which blkid come te al prompt della shell sudo su o comunque diventare root, e echo $PATH - si può verificare rapidamente il problema.Quindi è risolvere il problema utilizzando il comando blkid assoluta del percorso completo nel getoutput chiamata piuttosto che solo il minimo identificatore blkid come stai facendo ora.

Altri suggerimenti

L'ambiente (e il PERCORSO di un job di cron non è necessariamente la stessa come shell di login.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top