如何在python中等待输入时有更新提示?

时间:2016-09-01 13:30:15

标签: python python-3.x

所以问题是如何让输入函数或stdin.readline函数等待输入,同时有一个更新提示,即提示包含格式为HH:MM:SS的时间,并且每秒刷新一次,如:

while 1:
    sys.stdout.write('\r' + time.strftime(TIME_FORMAT) +  ' :>')
    time.sleep(1.0)

但是只要你在那里添加输入,程序当然会等到你写一些输入。我使用的python版本是3.5。

我知道我应该使用curses,但我正在计划编写一个跨平台程序,我找到的唯一模块是clint,但它在更新提示的文档中没有任何内容。

我发现了一些非常接近但有不同问题的东西:

def input_thread(L):
    x = input()
    L.append(x)

L = []
thread = threading.Thread(target=input_thread, args=(L,))
thread.start()
while 1:
    sys.stdout.write('\r' + time.strftime(TIME_FORMAT) +  '>:')
    time.sleep(1.0)
    sys.stdout.flush()

现在问题仍然是当你输入输入但不按ENTER时,下一次迭代的输入仍然存在,但是当你写东西时,先前的输入被当前输入替换。当然,先前的输入仍然存在于参数L中,因此没有输入丢失。我希望我没有把这描述为混乱。

如果没有简单的方法可以用诅咒来完成,我可以使用类似的交叉打开工具。谢谢你的时间和答案!

1 个答案:

答案 0 :(得分:0)

所以,几个月前我想出了我想要的东西,但没有回答我自己的问题。

要获得更新时间的提示,您需要一个单独的线程:

  1. 使用其他输入更新提示
  2. 抓住你的击键
  3. 第二个线程处理每个按键,你可以编程它如何处理按下的按键。

    按键时,更新提示的线程会添加按下的键。此外,您还必须为Return,Backspace等配置一些快捷方式,以便按预期工作

    我已经让它工作了,不幸的是......我不喜欢它。如果有人想看到我愿意提供的代码。