Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect if python script is run from console or by crontab [duplicate]

Imagine a script is running in these 2 sets of "conditions":

  1. live action, set up in sudo crontab
  2. debug, when I run it from console ./my-script.py

What I'd like to achieve is an automatic detection of "debug mode", without me specifying an argument (e.g. --debug) for the script.

Is there a convention about how to do this? Is there a variable that can tell me who the script owner is? Whether script has a console at stdout? Run a ps | grep to determine that?

Thank you for your time.

like image 440
Martin Tóth Avatar asked Nov 18 '10 09:11

Martin Tóth


3 Answers

Since sys.stdin will be a TTY in debug mode, you can use the os.isatty() function:

import sys, os
if os.isatty(sys.stdin.fileno()):
    # Debug mode.
    pass
else:
    # Cron mode.
    pass
like image 94
Frédéric Hamidi Avatar answered Oct 08 '22 00:10

Frédéric Hamidi


You could add an environment variable to the crontab line and check, inside your python application, if the environment variable is set.

crontab's configuration file:

CRONTAB=true

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

Python code:

import os

if os.getenv('CRONTAB') == 'true':
   # do your crontab things
else:
   # do your debug things
like image 45
Simone Avatar answered Oct 08 '22 01:10

Simone


Use a command line option that only cron will use.

Or a symlink to give the script a different name when called by cron. You can then use sys.argv[0]to distinguish between the two ways to call the script.

like image 4
Ber Avatar answered Oct 08 '22 01:10

Ber