如何检查标准输入是否有数据?
在Python中,怎么检查sys.stdin
有没有数据呢?
我发现os.isatty(0)
不仅可以检查标准输入(stdin)是否连接到一个终端设备(TTY),还可以用来判断是否有数据可用。
但是,如果有人使用了这样的代码
sys.stdin = cStringIO.StringIO("ddd")
然后再使用os.isatty(0)
,它仍然会返回True。那么,我该怎么做才能检查标准输入有没有数据呢?
7 个回答
4
这要看你的目标是什么:
import fileinput
for line in fileinput.input():
do_something(line)
这也可能会很有用。
99
我一直在使用
if not sys.stdin.isatty()
这里有一个例子:
import sys
def main():
if not sys.stdin.isatty():
print "not sys.stdin.isatty"
else:
print "is sys.stdin.isatty"
运行
$ echo "asdf" | stdin.py
not sys.stdin.isatty
sys.stdin.isatty()
如果 stdin
没有连接到一个可以互动的输入设备(比如说一个终端),那么它会返回假(false)。
isatty(...)
isatty() -> true or false. True if the file is connected to a tty device.
95
在Unix系统上,你可以这样做:
import sys
import select
if select.select([sys.stdin, ], [], [], 0.0)[0]:
print("Have data!")
else:
print("No data")
不过在Windows上,select模块只能和网络连接(也就是套接字)一起使用,所以你需要找其他的方法。