Python в SU cron дает другой вывод, чем выполнение вручную - PullRequest
0 голосов
/ 05 марта 2010

Ubuntu Server 9.10, Вот мой файл, test.py

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

Когда я запускаю вручную (как SU), это:

python test.py

Я получаю вывод blkid , как и ожидалось:

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

Однако, когда я добавляю это в мой crontab SU:

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

Содержимое output становится:

sh: blkid: not found

Что мне здесь не хватает? Модуль Python команды предназначен только для определенных команд, специфичных для SH? Я просто пытаюсь запустить системную команду и записать вывод в переменную, которую я могу проанализировать.

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Проблема, вероятно, связана с вашим $PATH против root (os.environ['PATH'], если вы смотрите на него в Python, а не в shell ;-).PATH root обычно очень консервативен (было бы рискованно, если бы НЕ было!), и поскольку вы запускаете blkid без указания абсолютного пути, это может легко означать, что он находится в вашем PATH, но не root.* Так что which blkid как вы сами по приглашению оболочки, sudo su или в любом случае станете пользователем root и echo $PATH - вы можете быстро проверить проблему.Затем вы исправляете это, используя абсолютный полный путь blkid в вызове getoutput вместо простого идентификатора blkid, как вы делаете сейчас.

0 голосов
/ 05 марта 2010

Среда (и PATH) задания cron не обязательно совпадает с вашей оболочкой входа в систему.

...