如何检查标准输入是否有数据?

89 投票
7 回答
72624 浏览
提问于 2025-04-16 04:25

在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模块只能和网络连接(也就是套接字)一起使用,所以你需要找其他的方法。

撰写回答