加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

从子线程中断主线程的raw_input()

发布时间:2020-12-20 13:28:34 所属栏目:Python 来源:网络整理
导读:我有多线程的 Python程序.主线程响应用户的命令: while 1: try: cmd = raw_input(" ") if cmd == "exit": break # other commands except KeyboardInterrupt: break# other stuffs 问题:如何从其他子线程中断while循环? sys.exit()不是一个选项,因为while
我有多线程的 Python程序.主线程响应用户的命令:

while 1:
    try:
        cmd = raw_input(">> ")
        if cmd == "exit":
            break
        # other commands
    except KeyboardInterrupt:
        break

# other stuffs

问题:如何从其他子线程中断while循环?

sys.exit()不是一个选项,因为while循环之外还有其他代码.

我想到的可能的解决方案:

>中断主线程
>写一个“退出”到sys.stdin

解决方案1:我尝试了thread.interrupt_main(),但它没有用.

解决方案2:调用sys.stdin.write()将不起作用,以下代码:

f = open(sys.stdin.name,"w")
f.write("exit")
f.close()

Another similar question提供了一个答案,建议您生成另一个进程并使用subprocess.Popen.communicate()向其发送命令.但是不可能对当前进程本身进行communication()吗?

解决方法

您可以使用类似 select的内容来检查sys.stdin上何时有输入.这使循环不等待raw_input而是轮询,而你可以有一个循环条件来检查是否退出循环.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读