2014-02-09 5 views
0

У меня есть скрипт python, который будет читать температуру от зонда на выводах GPIO малины-Pi и добавит эту температуру в файл журнала. Запуск формы сценария терминала с правами SUDO работает отлично:Не удается запустить Python из Cron

sudo python /home/pi/temp.py 

Я попытался запустить скрипт каждые 15 минут из файла кронтаба SUDO с линией:

*/15 * * * * python /home/pi/temp.py 

Это терпит неудачу, с выходом являющееся

Traceback (most recent call last): 
    File "/home/pi/temp.py", line 8, in <module> 
    subprocess.call(['modprobe', 'w1-gpio']) 
    File "/usr/lib/python2.7/subprocess.py", line 493, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

Я знаю, что проблема связана с вызовом подпроцесса modprobe, но я не могу точно определить, что именно. В моем сценарии, у меня есть следующий код, связанный с вопросом:

import subprocess 

subprocess.call(['modprobe', 'w1-gpio']) 
subprocess.call(['modprobe', 'w1-therm']) 

ответ

3

Это потому, что cron имеет свою собственную PATH переменную и не использовать один и тот же путь, что вы делаете.
По этой причине было бы целесообразно, чтобы вызывать любые программы, которые вы используете (особенно через Питона subprocess) абсолютный путь к исполняемому

Вы могли бы сделать which modprobe в командной строке, чтобы найти, где modprobe жизни (вероятно, в /bin/), а затем измените свой запрос в subprocess.py на subprocess.call(['/bin/modprobe', 'w1-gpio'])

+1

Это все. Мой modprobe жил в '/ sbin /', но добавление этого в subprocess.call в моем скрипте temp.py решило мою проблему. Большое спасибо! – Tman21901

Смежные вопросы