您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 在单独的线程中等待用户输入

5b51 2022/1/14 8:20:54 python 字数 3072 阅读 442 来源 www.jb51.cc/python

我想要一种方法来生成一个等待用户输入的线程;如果在10秒内没有输入任何输入,我希望脚本终止生成的线程并继续处理.如果输入文本,我有办法从线程中获取输入但是我无法让超时终止新生成的线程.在下面的例子中,我是最接近的.我告诉新创建的线程它是一个守护进程,它将在主脚本退出时退出.我对此的问题是该线程将继续等待,直到脚本退出或用户输入了某些内容.shared_var

概述

我想要一种方法生成一个等待用户输入的线程;如果在10秒内没有输入任何输入,我希望脚本终止生成的线程并继续处理.如果输入文本,我有办法从线程中获取输入但是我无法让超时终止新生成的线程.

在下面的例子中,我是最接近的.我告诉新创建的线程它是一个守护进程,它将在主脚本退出退出.我对此的问题是该线程将继续等待,直到脚本退出用户输入了某些内容.

shared_var = ['1']
def run(ref):
    ref[0] = raw_input("enter something: ")
    print "shared var changed to '%s'" % (ref[0])

thread = threading.Thread(target=run,args=(shared_var,))
thread.daemon = True  
thread.start()
time.sleep(10)  # simplified timeout

#Need some way to stop thread if no input has been entered
print "shared var = " + shared_var[0]

我知道突然杀死一个线程不是最好的方法(Related Link),但我不知道如何中断等待raw_input的新线程

目前为止的最佳解决方案是

# Declare a mutable object so that it can be pass via reference
user_input = [None]

# spawn a new thread to wait for input 
def get_user_input(user_input_ref):
    user_input_ref[0] = raw_input("Give me some Information: ")

mythread = threading.Thread(target=get_user_input,args=(user_input,))
mythread.daemon = True
mythread.start()

for increment in range(1,10):
    time.sleep(1)
    if user_input[0] is not None:
        break

总结

以上是编程之家为你收集整理的python – 在单独的线程中等待用户输入全部内容,希望文章能够帮你解决python – 在单独的线程中等待用户输入所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶