3

我试过了:

from time import sleep
while sleep(3): 
    input("Press enter to continue.") 

但这似乎不起作用。我希望程序等待用户输入,但如果 10 分钟后没有用户输入,则继续使用该程序。

这是使用 python 3。

4

3 回答 3

9

为什么代码不起作用?

time.sleep什么都不返回;time.sleep(..)成为的价值Nonewhile不执行循环体。

如何解决

如果你在 Unix 上,你可以使用select.select.

import select
import sys

print('Press enter to continue.', end='', flush=True)
r, w, x = select.select([sys.stdin], [], [], 600)

否则,您应该使用线程。

使用的Windows 特定解决方案msvcrt

import msvcrt
import time

t0 = time.time()
while time.time() - t0 < 600:
    if msvcrt.kbhit():
        if msvcrt.getch() == '\r': # not '\n'
            break
    time.sleep(0.1)
于 2013-10-22T03:23:23.127 回答
6

这是使用警报的简单方法。当时间到期时,将调用 lambda 函数,这将引发一个ZeroDivisionError.

from signal import signal, alarm, SIGALRM

signal(SIGALRM, lambda x, y: 1/0)
try:
    alarm(600)
    input("Press enter to continue.")
except ZeroDivisionError:
    print("timed out")
于 2013-10-22T03:32:14.283 回答
2

另一种方法是:

from time import sleep
print("I'm executing")
try:
    print("Wake up Ctrl-C!")
    sleep(600)
except KeyboardInterrupt:
    print("I woke up!")
else:
    print("I'm executing again.")

不是最好的答案,而且绝对感觉像是在滥用异常,但它确实有效。

于 2013-10-22T04:22:19.450 回答