【发布时间】:2011-04-15 08:11:41
【问题描述】:
在Python中,如何检查sys.stdin是否有数据?
我发现os.isatty(0)不仅可以检查stdin是否连接到TTY设备,还可以检查是否有可用的数据。
但是如果有人使用诸如
之类的代码sys.stdin = cStringIO.StringIO("ddd")
之后使用os.isatty(0),它仍然返回True。我需要做什么来检查stdin是否有数据?
【问题讨论】:
-
你到底想达到什么目的?
-
发生这种情况是因为
os.isatty(0)检查与文件描述符 (fd) 0 关联的文件是否为 TTY。当您更改sys.stdin变量时,您不会更改与 fd0 关联的文件。 fd0 仍然指向原始标准输入(在您的情况下是 TTY)。 -
检查this answer。是否与您的问题有关?
-
@Cristian Ciupitu,你是对的,我使用 sys.stdin=cStringIO.String("ddd") 重定向标准输入,我想要的是如何检查 sys.stdin 是否有数据,如果我直接使用 sys.stdin.read() 它会阻塞下面的东西,如果没有输入,它会一直等待
-
我看不到来自
cStringIO.StringIO("ddd")的读取会如何阻塞;它总是有可用的数据,当然,除非达到 EOF。
标签: python redirect stdout stdin