Detectar si el script de Python se ejecuta desde la consola o mediante crontab

Imagina que se está ejecutando un script en estos 2 conjuntos de “condiciones”:

  1. Acción en vivo, puesta en sudo crontab
  2. depuración, cuando lo ejecuto desde la consola ./my-script.py

Lo que me gustaría lograr es una detección automática del “modo de depuración”, sin que yo especifique un argumento (por ejemplo, --debug ) para el script.

¿Hay una convención sobre cómo hacer esto? ¿Hay alguna variable que pueda decirme quién es el propietario del script? Si el script tiene una consola en stdout ? Ejecutar un ps | grep ps | grep para determinar eso?

Gracias por tu tiempo.

Como sys.stdin será un TTY en modo de depuración, puede usar la función os.isatty () :

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

Puede agregar una variable de entorno a la línea crontab y verificar, dentro de su aplicación de python, si la variable de entorno está establecida.

Archivo de configuración de crontab:

 CRONTAB=true # run five minutes after midnight, every day 5 0 * * * /path/to/your/pythonscript 

Código Python:

 import os if os.getenv('CRONTAB') == 'true': # do your crontab things else: # do your debug things 

Use una opción de línea de comando que solo cron usará.

O un enlace simbólico para darle al script un nombre diferente cuando lo llama cron. Luego puede usar sys.argv[0] para distinguir entre las dos formas de llamar al script.