2009-10-03 7 views

Répondre

7

En fait, ce que vous voulez faire ici est savoir si stdin et stdout sont les même chose.

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

Plus mais la version plus traditionnelle du sont-ils le même fichier test compare juste st_ino et st_dev. En règle générale, sur les fenêtres, ils sont truqués avec un hachage de quelque chose de sorte que ce modèle de conception exacte fonctionnera.

+0

Depuis que cela fonctionne sur Windows, je pense que c'est ce que je veux. Notez que cette approche * ne fonctionnera pas * si je le fais: $ echo "blah" | python test.py –

4

Regardez

os.isatty(fd) 

(je ne pense pas que cela fonctionne sur Windows, cependant)

28
import sys 

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

Il y a une erreur sur Windows: si un flux est redirigé vers nul, 'isatty' renvoie toujours True. – user87690

Questions connexes