2009-10-03 19 views

Respuesta

7

En realidad, lo que quiere hacer aquí es averiguar si stdin y stdout son la la misma cosa.

$ cat test.py 
import os 
print os.fstat(0) == os.fstat(1) 
$ python test.py 
True 
$ python test.py > f 
$ cat f 
False 
$ 

La versión más larga pero más tradicional de la son que la misma prueba archivo simplemente compara st_ino y st_dev. Por lo general, en Windows se falsifican con un algoritmo hash de algo para que este patrón de diseño exacto funcione.

+0

Dado que esto funciona en Windows, creo que es lo que quiero. Tenga en cuenta que este enfoque * no * funcionará si lo hago: $ echo "blah" | python test.py –

4

Mira

os.isatty(fd) 

(no creo que esto funciona en Windows, sin embargo)

28
import sys 

if sys.stdout.isatty(): 
    print "Not redirected" 
else: 
    sys.stderr.write("Redirected!\n") 
+0

Hay un inconveniente en Windows: si una secuencia se redirige a nul, 'isatty' todavía devuelve True. – user87690

Cuestiones relacionadas