Запуск Python Script с Launchd: импорт не найден
Я пытался настроить скрипт для запуска программы Python через равные промежутки времени, используя launchd
, Программа python не работает, потому что она не может найти мой импорт - я знаю это, потому что я уловил ошибки в файле журнала. Чтобы исправить эту проблему, я создал ~\.MacOSX\environment.plist
и продублировал мой PYTHONPATH
там, вышли из системы и снова вошли в систему. Кажется, этого недостаточно для решения проблемы, и я не знаю, что еще можно попробовать.
Я использую OSX, 10.8.3.
Связанные темы:
- launchd выполняет скрипт Python, но импорт завершается неудачно (не применимо - мой скрипт указывает на правильный экземпляр Python)
ОБНОВИТЬ:
Похоже, я могу запустить следующую команду:
launchctl setenv PYTHONPATH $PYTHONPATH
и скрипт будет успешно выполнен. Итак, чтобы изменить мой вопрос:
- Где это хранится? Я проверил
~\.launchd.conf
а также\etc\.launchd.conf
ни того, ни другого не существовало. - Предположительно, этот параметр сбрасывается при перезагрузке. Где я могу изменить эту информацию, чтобы
launchd
найдет это?
2 ответа
Чтобы установить среду конкретной работы, вы должны использовать 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
Обновить: /etc/launchd.conf
не поддерживается в Mac OS X 10.10 и выше. В этих системах вам придется определять переменные среды для каждой конкретной работы.
Ничто из перечисленного на самом деле не работает для меня (OS X 10.11.3). Прорыв состоял в том, что этот скрипт прекрасно работает в терминале, но не из 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>