Я прочитал несколько сообщений и много статей, в которых подробно описывается, что сценарии в задании cron должны сохранять переменные среды, необходимые для запуска внутри самого сценария, из-за открытия оболочек в cron. Моя ситуация уникальна тем, что все мои переменные пути установлены, как описано, что, в свою очередь, успешно вызовет яйцо python pysaunter, используя subprocess.call (), но, похоже, оттуда он не работает. Это приводит к прерыванию всего процесса в работе cron.
Для ясности, вот шаги, о которых я говорю:
1) cronjob calls run_test.py -n foo
2) run_test.py sets the environment variables correctly
(cur_shell_path=sys.path (converted to proper path string, not shown here)
my_env= os.environ.copy()
my_env["PATH"] = my_env["PATH"] + cur_shell_path)
3) run_test.py calls subprocess.call("pysaunter -m foo -v", env=my_env, shell=True)
Результат шага 3 показывает, что он находит яйцо и успешно начинает загружать необходимые модули из pysaunter, но затем ломается при попытке найти каталог, используемый для изменения pysaunter. Ошибка гласит:
ImportError: no module named helpers
Я пытался добавить этот путь в среду несколько раз, но мне не удалось найти каталог, содержащий helpers.py. Команда pysaunter -m foo -v
работает нормально при вызове из интерактивной оболочки.
Мне не удалось найти много помощи по pysaunter, поэтому я предполагаю, что слишком много подробностей pysaunter здесь было бы ненужным. Однако, если вы знаете больше о pysaunter, дайте мне знать, если вам потребуется дополнительная информация. Я не знаю, чем поделиться.
Я также прочитал много сообщений, в которых обсуждается возможность изменения поведения оболочки по умолчанию путем редактирования файла .profile / .bash_profile. Я попытался найти место, которое сделало бы мои переменные пути глобально доступными, но ничего не нашел. Я не знаю, как это делается, и это может решить мою проблему, поэтому, если вы что-то знаете об этом, дайте мне знать.
Последнее замечание, это работает на Mac 10.7.5.