我想创建一个等待输入的函数,如果在2秒内没有输入任何内容,则跳过输入并继续执行函数的其余部分。
我从另一个线程尝试过这个函数:
import time
from threading import Thread
answer = None
def check():
time.sleep(2)
if answer != None:
return "ayy"
print("Too slow")
return "No input"
Thread(target = check).start()
answer = input("Input something: ")
print(answer)
此代码要求输入,如果在2秒内未添加任何输入,则打印"太慢"。然而它永远不会继续打印(回答),我认为它一直在等待用户输入。
我想要求用户输入,如果需要太长时间,只需要输入=无,然后转到下面的函数。我查看了涉及信号的超时方法,但这只适用于linux和im在Windows上。
答案 0 :(得分:0)
你的假设是对的。 input()
调用正在等待用户提交任何在您的情况下从未发生的输入。
跨平台解决方案是使用select()
:
import sys
import select
def timed_input(prompt, timeout=10):
"""
Wait ``timeout`` seconds for user input
Returns a tuple:
[0] -> Flag if timeout occured
[1] -> User input
"""
sys.stdout.write(prompt)
sys.stdout.flush()
input, output, error = select.select([sys.stdin], [], [], 2)
if input:
return True, sys.stdin.readline().strip()
else:
return False, None
timed_input('Input something: ', timeout=2)
那是一个肮脏的原型。我建议使用超时的异常或函数的更直观的返回值。