Frage

Ubuntu Server 9.10, Hier ist meine Datei, test.py

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

Wenn ich manuell ausführen (wie SU) folgt aus:

python test.py

bekomme ich die Ausgabe des blkid wie erwartet:

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

Allerdings, wenn ich In meiner SU crontab:

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

Der Inhalt von Ausgang wird:

sh: blkid: not found

Was bin ich hier? Ist Python Befehle Modul nur für bestimmte SH-spezifische Befehle? Ich versuche einfach, ein System Befehl auszuführen und die Ausgabe in eine Variable zu erfassen, dass ich analysieren kann.

War es hilfreich?

Lösung

Das Problem ist wahrscheinlich mit Ihrem $PATH im Vergleich zu der Wurzel (os.environ['PATH'] wenn man es in Python freuen anstatt Shell ist ;-). Wurzel PATH ist in der Regel sehr konservativ (es riskant wäre, es nicht zu sein!) und da Sie blkid laufen lassen, ohne einen absoluten Pfad angeben, dass bedeuten kann, leicht, dass es auf dem Weg ist, aber nicht die Wurzel.

So tun which blkid wie sie an einem Shell-Prompt sudo su oder sowieso mit Root und echo $PATH - Sie schnell das Problem überprüfen können. Dann sind Sie sie beheben, indem blkid absoluten vollständigen Pfad im getoutput-Aufruf nicht nur die bloße Kennung blkid, wie Sie jetzt tun.

Andere Tipps

Die Umwelt (und PATH) eines Cron-Job ist nicht unbedingt die gleiche wie Ihre Login-Shell.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top