Подтвердить что ты не робот

Обнаружение, если python script запускается с консоли или crontab

Представьте, что в этих двух наборах "условий" работает script:

  • живое действие, настроенное в sudo crontab
  • debug, когда я запускаю его с консоли ./my-script.py

То, что я хотел бы достичь, - это автоматическое обнаружение "режима отладки", без указания аргумента (например, --debug) для script.

Есть ли соглашение о том, как это сделать? Есть ли переменная, которая может сказать мне, кем является владелец script? У script есть консоль в stdout? Запустите a ps | grep, чтобы определить, что?

Спасибо за ваше время.

4b9b3361

Ответ 1

Так как sys.stdin будет TTY в режиме отладки, вы можете использовать функция os.isatty():

import sys, os
if os.isatty(sys.stdin.fileno()):
    # Debug mode.
    pass
else:
    # Cron mode.
    pass

Ответ 2

Вы можете добавить переменную окружения в строку 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

Ответ 3

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

Или символическая ссылка, чтобы дать script другое имя при вызове cron. Затем вы можете использовать sys.argv[0], чтобы различать два способа вызова script.