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

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

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

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

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

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

4 Solutions collect form web for “如何检查标准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参数。

  • 为什么我得到“未处理的exceptiontypesIOException”?
  • Eclipse从文件读取stdin(System.in)
  • 如何pipe道input到Bash while循环,并在循环结束后保存variables
  • 发送string到标准input
  • 如何将variables的值传递给命令的stdin?
  • pythonsubprocess中的多个input和输出进行通信
  • 如何让SSH从标准input接收密码
  • 我无法刷新标准input
  • 文件描述符
  • 如何打开文件夹中的每个文件?
  • 欺骗一个应用程序,认为它的标准input是交互式的,而不是pipe道