2009-07-02 16 views
104

¿Hay alguna forma de detectar si sys.stdout está conectado a un terminal de consola o no? Por ejemplo, yo quiero ser capaz de detectar si se ejecuta a través de foo.py:¿Cómo puedo detectar si sys.stdout está conectado al terminal o no?

$ python foo.py # user types this on console 

O

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

La razón por la que hago esta pregunta es que quiero para asegurarse de que mi pantalla progressbar ocurre solo en el primer caso (consola real).

Respuesta

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

Para demostrar en su concha, comparar 'python -c "import sys; impresión (sys.stdout.isatty())"' (debe escribir 'true') con' python -c "import sys; print (sys.stdout.isatty()) "| grep .' (debería escribir 'False'). –

Cuestiones relacionadas