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()ましたが、うまくいきませんでした。

sys.stdin.write()解決策 2:次のコードでも呼び出しが機能しません。

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 に答える