2013-03-20 3 views
2

Я пытался настроить скрипт для запуска программы python с регулярными интервалами, используя launchd. Программа python терпит неудачу, потому что она не может найти мой импорт --- я знаю это, потому что я поймал ошибки в файле журнала. Чтобы исправить эту проблему, я создал ~\.MacOSX\environment.plist и дублировал мой PYTHONPATH, вышел из системы и снова вошел в систему. Кажется, этого недостаточно, чтобы решить проблему, и я не понимаю, что еще попробовать.Запуск сценария Python с Launchd: импорт не найден

Я запускаю OSX, 10.8.3.

Похожие темы:

UPDATE:

Оказывается, что я могу запустить следующую команду:

launchctl setenv PYTHONPATH $PYTHONPATH 

и сценарий будет xecute успешно. Поэтому, чтобы изменить мой вопрос:

  1. Где это хранится? Я проверил ~\.launchd.conf и \etc\.launchd.conf, не существовал.
  2. Предположительно, эта настройка сбрасывается при перезагрузке. Где я могу изменить эту информацию, чтобы найти ее? launchd?
+0

Мы экспортируем PYTHONPATH? – Ishpeck

+0

Что значит экспортировать? Где я его экспортирую? (PS: см. Обновление.) – BenDundee

+1

http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x – Ishpeck

ответ

5

Для установки среды конкретного задания вы должны использовать ключ EnvironmentVariables в самом определении работы:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.example.app</string> 
    <key>Program</key> 
    <string>/path/to/your/script</string> 
    <key>EnvironmentVariables</key> 
    <dict> 
     <key>PYTHONPATH</key> 
     <string>/your/python/path</string> 
    </dict> 
</dict> 
</plist> 

Вы можете определить переменные окружения по умолчанию для launchd(8) служб пути редактирования /etc/launchd.conf для демонов или /etc/launchd-user.conf для агенты. Последний работает, но не документирован. В настоящее время зарегистрированный (но неподдерживаемый) конфигурационный файл для каждого пользователя: $HOME/.launchd.conf.

Эти конфигурационные файлы содержат список подкоманд launchctl(1). Один вы хотите:

setenv PYTHONPATH /your/python/path 

Update:/etc/launchd.conf не поддерживается в Mac OS X 10.10 и выше. В этих системах вам придется определять переменные среды на основе работы.

+0

Не существует способа установить его один раз, в одном месте, а не рассказывать об этом каждый plist? – BenDundee

+1

Я отредактировал ответ, чтобы показать, как глобально определять переменные среды для 'launchd (8)' заданий. – LCC

2

Ничего из вышеперечисленного на самом деле не работало для меня (OS X 10.11.3). Прорыв читал это script runs fine in terminal but not from launchd и с запозданием осознал, что можно написать абсолютный полный путь к версии python с правильными модулями. D'о.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.example.app</string> 
    <key>ProgramArguments</key> 
    <string>/path/to/your/python</string> 
    <string>/path/to/your/script</string> 
</dict> 
</plist> 
Смежные вопросы