如何检查标准input是否有一些数据?

在Python中,你如何检查sys.stdin是否有数据?

我发现os.isatty(0)不仅可以检查标准input是否连接到TTY设备,而且如果有数据可用。

但是如果有人使用这样的代码

 sys.stdin = cStringIO.StringIO("ddd") 

之后使用os.isatty(0) ,它仍然返回True。 我需要做什么来检查标准input是否有数据?

在Unix系统上,您可以执行以下操作:

 import sys import select if select.select([sys.stdin,],[],[],0.0)[0]: print "Have data!" else: print "No data" 

在Windows上,select模块只能用于套接字,所以你需要使用一个替代机制。

我一直在使用

 if not sys.stdin.isatty() 

这是一个例子:

 4 import sys 5 6 def main(): 7 if not sys.stdin.isatty(): 8 print "not sys.stdin.isatty" 9 else: 10 print "is sys.stdin.isatty" >echo "asdf" | stdin.py not sys.stdin.isatty 

sys.stdin.isatty()返回false,如果有stdin中的东西。

 isatty(...) isatty() -> true or false. True if the file is connected to a tty device. 

根据这里的目标:

 import fileinput for line in fileinput.input(): do_something(line) 

也可以是有用的。

正如其他人所提到的那样,没有万无一失的办法,因为UNIX不允许这样做。 总是等待标准input,即使可能没有任何东西(这就是grep等),或者要求用户input参数。