2009-10-03 6 views

Antwort

7

Eigentlich, was Sie hier tun möchte, ist herauszufinden, ob stdin und stdout sind die gleiche Sache.

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

Je länger aber traditionelleren Version des sind sie die gleiche Datei Test vergleicht nur st_ino und st_dev. In der Regel werden diese bei Windows mit einem Hash von etwas vorgetäuscht, damit dieses exakte Designmuster funktioniert.

+0

Da dies unter Windows funktioniert, denke ich, dass es das ist, was ich möchte. Beachten Sie, dass dieser Ansatz * nicht funktionieren wird, wenn ich Folgendes tue: $ echo "blah" | python test.py –

4

Blick auf

os.isatty(fd) 

(ich glaube nicht, das unter Windows arbeitet, jedoch)

28
import sys 

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

Es gibt einen Haken bei Windows: Wenn ein Stream zu nul umgeleitet wird, gibt 'isatty' immer noch True zurück. – user87690

Verwandte Themen