Ответ 1
Так как sys.stdin
будет TTY в режиме отладки, вы можете использовать функция os.isatty():
import sys, os
if os.isatty(sys.stdin.fileno()):
# Debug mode.
pass
else:
# Cron mode.
pass
Представьте, что в этих двух наборах "условий" работает script:
sudo crontab
./my-script.py
То, что я хотел бы достичь, - это автоматическое обнаружение "режима отладки", без указания аргумента (например, --debug
) для script.
Есть ли соглашение о том, как это сделать? Есть ли переменная, которая может сказать мне, кем является владелец script? У script есть консоль в stdout
? Запустите a ps | grep
, чтобы определить, что?
Спасибо за ваше время.
Так как sys.stdin
будет TTY в режиме отладки, вы можете использовать функция os.isatty():
import sys, os
if os.isatty(sys.stdin.fileno()):
# Debug mode.
pass
else:
# Cron mode.
pass
Вы можете добавить переменную окружения в строку crontab и проверить внутри вашего приложения python, если установлена переменная среды.
Файл конфигурации crontab:
CRONTAB=true
# run five minutes after midnight, every day
5 0 * * * /path/to/your/pythonscript
Код Python:
import os
if os.getenv('CRONTAB') == 'true':
# do your crontab things
else:
# do your debug things
Используйте параметр командной строки, который будет использовать только cron.
Или символическая ссылка, чтобы дать script другое имя при вызове cron. Затем вы можете использовать sys.argv[0]
, чтобы различать два способа вызова script.