【发布时间】:2016-12-14 14:59:31
【问题描述】:
我知道这是一个常见问题,我尝试了任何可以在此处和其他网站上找到的解决方案^但无法解决我的问题。 我的困境如下(在 Windows 上):
我有一个主脚本 (main.py),我在其中通过 Popen 调用另一个脚本 (sniffer.py) 创建一个子进程。之后我在 main.py 中做一些事情,最后想向子进程发送一个字符以完成 sniffer.py 中的无限循环,最后是整个子进程。
main.py
process = Popen(["python", "sniffer.py", receiverIP, senderIP, "udp", path],stdin=PIPE)
#do some stuff
process.communicate('terminate')
sniffer.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 循环在我的通信()调用后不会继续(整个脚本只是挂起)
【问题讨论】:
-
您能否具体说明它“不起作用”的具体程度?请提供您的输出以帮助调试。
-
我已经编辑了我的问题
标签: python windows subprocess communicate