Я прочитал несколько сообщений и много статей, в которых рассказывается о том, что для работы в cron необходимо, чтобы переменные среды, необходимые для запуска внутри самого script из-за открытия оболочек внутри cron. Моя ситуация уникальна тем, что мои переменные пути все заданы, как обсуждалось, что, в свою очередь, успешно вызовет pysaunter python egg, используя 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.