我知道这是一个经常被问到的问题,我尝试了任何可以在此处和其他网站上找到的解决方案^但无法解决我的问题。我的困境如下(在 Windows 上):
我有一个主脚本(main.py),我通过 Popen 创建一个子进程调用另一个脚本(sniffer.py)。之后我在 main.py 中做一些事情,最后想向子进程发送一个字符以完成 sniffer.py 中的无限循环,最后是整个子进程。
主文件
process = Popen(["python", "sniffer.py", receiverIP, senderIP, "udp", path],stdin=PIPE)
#do some stuff
process.communicate('terminate')
嗅探器.py
def check(done):
while True:
if sys.stdin.read() == 'terminate':
done = True
break
def sniff(someparams):
done = False
input_thread = threading.Thread(target=check, args=(done,))
input_thread.daemon = True
input_thread.start()
while True:
#do some stuff
if done:
break
我还尝试将通信调用与 stdin.write 结合起来,但没有效果。
注意:我注意到,在我的通信()调用之后,sniffer.py 中的 while 循环不会继续(整个脚本只是挂起)