【问题标题】:Timeout a input(prompt) after 60 seconds of inactivity from user[python]用户闲置 60 秒后超时输入(提示)[python]
【发布时间】:2020-10-01 06:10:08
【问题描述】:
activity = input("Enter the message:")

如果没有来自用户的输入,它应该被自动停止,给一个消息没有来自用户的活动。我是python的新手。任何帮助表示赞赏。

【问题讨论】:

    标签: python python-3.x windows timeout user-input


    【解决方案1】:

    用线程这样做:

    import threading
    import queue
    
    result_queue = queue.Queue()
    def input_target(queue):
      queue.put(input('Enter the message:'))
    threading.Thread(target=input_target, daemon=True, args=(result_queue,)).start()
    result = None
    try:
      result = result_queue.get(timeout=1)
    except queue.Empty:
      result = None
    print([result])
    

    请注意,达到超时后线程继续运行,因此后续从标准输入读取将不起作用。

    或者,如果您想让后续读取工作,那么您可以尝试在循环中调用select.select(超时)和os.read(0, ...),但这在Windows上不起作用(因为select.select在Windows上要求文件句柄是一个套接字,它不适用于控制台输入)。

    【讨论】:

    • 代码按执行的方式工作,但在连续循环后会出现随机行为,例如:queue.put(input('Enter the message:')),它显示的是随机行为,有时它会按预期工作,但有时即使我们在提示中提供数据,也会将 NONE 作为输出。
    • @Togad:您描述的行为并不令人惊讶,它与答案相匹配:从标准输入的后续读取将不起作用。。仅供参考,input(...) 调用也是从标准输入读取的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多