2009-07-02 8 views
104

C'è un modo per rilevare se sys.stdout è collegato a un terminale di console o no? Per esempio, io voglio essere in grado di rilevare se foo.py è gestito tramite:Come faccio a sapere se sys.stdout è collegato al terminale o no?

$ python foo.py # user types this on console 

O

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

Il motivo che mi chiedo questa domanda è che voglio fare in modo che la mia esposizione progressbar accade solo nel primo caso (console reale).

risposta

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

Per dimostrare nella shell, confrontare 'python -c "import sys; stampa (sys.stdout.isatty())"' (dovrebbe scrivere 'true') con' python -c "import sys; stampa (sys.stdout.isatty()) "| grep .' (dovrebbe scrivere 'False'). –

Problemi correlati