【发布时间】:2015-02-10 11:51:12
【问题描述】:
我的程序正在使用来自用户的 input()。当用户在 5 秒内没有写任何东西时,我想打印 "hey,are you there?"。例如,用户写了一些东西,然后停止打字。如果用户等待超过 5 秒,那么我想打印"hey,are you there?"。到目前为止,我尝试过这个:
while True:
start=time.time()
x=input("enter something")
end=time.time()
dif=end-start
if 5<dif:
print("hey are you there?")
它没有像我预期的那样工作,因为它在等待用户。在用户写了一些东西之后,它正在写"hey are you there?"。但我希望当用户不输入任何内容时,也意味着x==False,我想警告用户。
更新我试过这个:
import msvcrt
import time
time1 = 0
print('enter something: ')
while not msvcrt.kbhit():
time.sleep(1)
time1 +=1
if time1 == 5:
print("hey are you there?")
while msvcrt.kbhit():
x = input()
它也没有工作。它在 5 秒后打印了 "hey are you there?",甚至是 x==True。到目前为止还没有解决方案,希望我解释了我需要什么。
【问题讨论】:
-
这将比您想象的要困难得多。请参阅此relevant xkcd,其中一些编程问题很难衡量它们的难度!这与“几乎不可能”相去甚远,但如果不探索线程和从标准输入持续读取,就无法做到这一点。
-
我也尝试过线程,仍然找不到任何解决方案。
-
我将通过构建一个线程来解决此问题,该线程侦听
msvcrt.kbhit()并在无限循环中跟踪最后一次按下按钮,直到它从消息中接收到毒丸。如果当前时间比最后一个 kbhit 长 5 秒,它应该在标准输出中放入一条消息并将其最后一次设置为现在。当用户完成输入后,主线程应该发送毒丸。 -
stackoverflow Python 大师在哪里啊 :-/ 我真的很想解决这个问题
-
我可以整理一些东西,但我现在正在工作,没有时间空闲。我会添加书签,稍后再回来,以防没有人回答
标签: python python-3.x time msvcrt