【问题标题】:Python read console input using select on the same linePython 在同一行使用 select 读取控制台输入
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    相关资源
    最近更新 更多