如何检查标准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参数。