通常,您使用循环在Python中逐行处理文件:
import sys
for s in sys.stdin:
# do something with the line in s
或
import sys
while True:
line = sys,stdin.readline()
if len(line) == 0: break
# process input line
当然,你也可以在这样的东西中使用raw_input():
try:
while True:
s = raw_input()
# process input line
except EOFError:
# there's EOF.
当然,在所有这些情况下,如果没有准备好读取的输入,则基础read()
操作会暂停等待I / O.
我想要做的是查看是否有待没有暂停的输入,所以我可以阅读,直到输入用尽,然后再做其他事情。也就是说,我希望能够做类似
的事情while "there is input pending":
#get the input
但是当没有更多的输入待处理时,打破循环。
答案 0 :(得分:0)
如果您使用的是某种Unix版本,并且您的标准输入是管道而不是文件,则可以使用select
module检查是否有等待输入。代码可能至少如下所示:
import select
rlist, wlist, elist = select.select([sys.stdin], [], [])
if rlist:
s = raw_input()
else:
pass # no input ready right now
答案 1 :(得分:0)
好的,here's something在UNIX上运行良好:
import sys
import select
import tty
import termios
def isData():
return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])
old_settings = termios.tcgetattr(sys.stdin)
try:
tty.setcbreak(sys.stdin.fileno())
i = 0
while 1:
print i
i += 1
if isData():
c = sys.stdin.read(1)
if c == '\x1b': # x1b is ESC
break
finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
当我有机会制作更好的测试程序时,我会修改/扩展这个答案。我(到目前为止)还不清楚tty
和termios
在Windows上的运作情况。
更新:Grmph。这取决于select
。我不喜欢Windows。