4

我有多线程 Python 程序。主线程响应用户命令:

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

# other stuffs

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

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

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

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

解决方案1:我试过thread.interrupt_main()了,但是没有用。

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

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

另一个类似的问题提供了一个答案,建议您生成另一个进程并使用subprocess.Popen.communicate()它向它发送命令。但是是否可以对communicate()当前流程本身进行操作?

4

1 回答 1

1

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

于 2012-06-26T11:17:19.627 回答