2010-11-18 10 views
12

Wyobraź skrypt jest uruchomiony w tych 2 zestawów „warunki”:wykryć, czy skrypt Pythona jest uruchamiany z konsoli lub przez crontab

  1. żywej akcji, ustanowionych w sudo crontab
  2. debugowania, gdy go uruchomić z konsoli ./my-script.py

Co chciałbym osiągnąć to automatyczne wykrywanie „tryb debugowania”, beze mnie podając argument (np --debug) do skryptu.

Czy istnieje konwencja dotycząca tego, jak to zrobić? Czy istnieje zmienna, która może mi powiedzieć, kto jest właścicielem skryptu? Czy skrypt ma konsolę pod adresem stdout? Uruchomić ps | grep, aby to ustalić?

Dziękuję za poświęcony czas.

+0

podobne do [to pytanie SO] (http://stackoverflow.com/questions/2086961/how-can-i-determine-if-a-python-script-is-executed-from-crontab) –

Odpowiedz

29

Od sys.stdin będzie TTY w trybie debugowania, można użyć os.isatty() funkcję:

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

Można dodać zmienną środowiskową do linii crontab i sprawdzić, wewnątrz aplikacji Python, jeśli zmiennej środowiskowej jest ustawiony. Plik konfiguracyjny

crontab za:

CRONTAB=true 

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

kod Python:

import os 

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

Użyj opcji wiersza polecenia, które tylko cron będzie używał.

Lub dowiązanie symboliczne do nadania skryptowi innej nazwy po wywołaniu przez cron. Następnie można użyć sys.argv[0], aby rozróżnić dwa sposoby wywoływania skryptu.

+1

Chociaż I uważam, że użycie 'os.isatty()' do wykrycia, czy 'sysout' jest terminalem jest hackerem. PO wyraźnie powiedział, że nie chce tego robić z argumentem wiersza poleceń. Ponadto brzmi to tak, jakby sam Python mógł robić coś podobnego - patrz informacja dla opcji linii poleceń interpretera ** - i ** w [1.1.3. Różne opcje (http://docs.python.org/using/cmdline.html?highlight=command%20line%20option#miscellaneous-options) sekcja dokumentacji online. – martineau

Powiązane problemy