【发布时间】:2014-02-10 12:00:41
【问题描述】:
我需要使用非阻塞方式从控制台读取。我成功地使用 select 做到了这一点
ready = select.select(read_list, [], [], timeout)[0]
read_list = [sys.stdin]
timeout = 0.1 # seconds
我现在的问题是 我需要在输入之前提供一个文本行(例如 UI),并且希望输入光标位于同一行。在我不使用 select 之前可以通过这样做来实现:
buff = raw_input(' ENTER CODE: ------\b\b\b\b\b\b')
这样光标就在逗号之后(例如在第一个'-'上)
现在我需要使用 stdin,光标总是在新行的开头。即使我这样做:
print(' ENTER CODE: ------\b\b\b\b\b\b\r')
while read_list:
ready = select.select(read_list, [], [], timeout)[0]
if not ready:
idle_work()
else:
for file in ready:
line = file.readline()
if not line: # EOF, remove file from input list
read_list.remove(file)
elif line.rstrip(): # optional: skipping empty lines
#treat_input(line)
buff =line.upper()
ETC...
有什么想法吗?
【问题讨论】:
-
您寻找非阻塞输入法是否有特殊原因?在我看来,更好的方法是使用另一个线程来执行后台任务,同时让
raw_input等待输入。 -
是的。我在 RaspberryPi 上(在各种事情中)
标签: python select stdin nonblocking