2009-08-16 5 views
2

Je voudrais que mon script ait 2 comportements, un lorsqu'il est démarré en tant que tâche planifiée, et un autre s'il est démarré manuellement. Comment pourrais-je tester l'interactivité?Comment puis-je vérifier si un script Python a été démarré de manière interactive?

EDIT: cela peut être un travail cron, ou démarré par un fichier batch Windows, à travers les tâches planifiées.

+1

"Tâche planifiée" ? Commencé par quel morceau de logiciel? Quelle plateforme? "Manuellement?" De IDLE? De la ligne de commande? Quelle plateforme? Quelle coquille? –

+0

Copie possible de [Vérification du shell interactif dans un script Python] (https://stackoverflow.com/questions/6108330/checking-for-interactive-shell-in-a-python-script) – ideasman42

Répondre

7

Si vous voulez savoir si vous êtes en train de lire un terminal (pas clair si cela est suffisant d'une distinction, s'il vous plaît préciser) vous pouvez utiliser

sys.stdin.isatty() 
11

Vous devez simplement ajouter un commutateur de ligne de commande dans la tâche planifiée et vérifiez-la dans votre script, en modifiant le comportement le cas échéant. Explicite est mieux qu'implicite. Un des avantages de cette conception: vous serez capable de tester les deux comportements, quelle que soit la manière dont vous avez invoqué le script.

+0

D'accord. Exécutez le script normalement avec awesomeApp et en tant que travail par lots avec awesomeApp --batch. – scvalex

0

Je voudrais juste ajouter un commutateur de ligne de commande lorsque vous appelez avec Cron:

python yourscript.py -scheduled

puis dans votre programme

import sys 

if "-scheduled" in sys.argv: 
    #--non-interactive code-- 
else: 
    #--interactive code-- 
+1

au moins utiliser le "- planifié" classique –