2009-07-02 5 views
104

Existe-t-il un moyen de détecter si sys.stdout est connecté à un terminal de console ou non? Par exemple, je veux être en mesure de détecter si foo.py est exécutée via:Comment puis-je détecter si sys.stdout est connecté au terminal ou non?

$ python foo.py # user types this on console 

OU

$ python foo.py > output.txt # redirection 
$ python foo.py | grep .... # pipe 

La raison pour laquelle je pose cette question est que je veux vous assurer que mon écran progressbar se produit uniquement dans le premier cas (console réelle).

Répondre

164
if sys.stdout.isatty(): 
    # You're running in a real terminal 
else: 
    # You're being piped or redirected 
+22

Pour démontrer dans votre shell, comparer "sys à l'importation; impression (sys.stdout.isatty())" '' python -c (doit écrire'on') avec import sys 'python -c »; print (sys.stdout.isatty()) "| grep .' (devrait écrire 'False'). –

Questions connexes