Запуск Python Script с Launchd: импорт не найден

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

Я использую OSX, 10.8.3.

Связанные темы:

ОБНОВИТЬ:

Похоже, я могу запустить следующую команду:

launchctl setenv PYTHONPATH $PYTHONPATH

и скрипт будет успешно выполнен. Итак, чтобы изменить мой вопрос:

  1. Где это хранится? Я проверил ~\.launchd.conf а также \etc\.launchd.confни того, ни другого не существовало.
  2. Предположительно, этот параметр сбрасывается при перезагрузке. Где я могу изменить эту информацию, чтобы 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>
Другие вопросы по тегам