Python在同一行使用select读取控制台输入

时间:2014-02-10 12:00:41

标签: python select stdin nonblocking

我需要使用非阻塞方式从控制台读取。我成功地使用select

设法完成了这项工作
ready = select.select(read_list, [], [], timeout)[0]
read_list = [sys.stdin]
timeout = 0.1 # seconds

我现在的问题是我需要在输入之前提供一个文本行(例如UI),并希望输入光标位于同一行。之前当我不使用时选择I可以通过以下方式实现这一目标:

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...

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我解决了这个问题,在print语句的末尾追加了一个'然后刷新std:

print('                     ENTER CODE: ------\b\b\b\b\b\b'),
sys.stdout.flush()