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

  • 欺骗一个应用程序,认为它的标准input是交互式的,而不是pipe道
  • node.js:从标准input读取同步?
  • Eclipse从文件读取stdin(System.in)
  • 在从STDIN读取数据时压缩文件
  • 为sys.stdin设置较小的缓冲区大小?
  • 在Java中读取System.in最快的方法是什么?
  • 如何打开文件夹中的每个文件?
  • 如何从Bash中的文件或标准input读取?
  • 我无法刷新标准input
  • 写入stdin并从stdout读取(UNIX / LINUX / C编程)
  • 如何写入Pythonsubprocess的标准input?