2016-12-14 63 views
0

我知道这是一个常见问题,我尝试了任何解决方案,我可以在这里和其他网站上找到^,但无法解决我的问题。 我的困境看起来如下(在Windows上):Python子进程通信挂起

我有一个主脚本(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循环我交流()调用后不会继续(整个脚本只是挂起)

+0

你能指定它是如何特别'没有工作'吗?请提供您的输出以帮助调试。 – AndyW

+0

我编辑了我的问题 – braheem38

回答

2

无关,与subprocess

您在本地将done更改为True。您必须全局定义最后一个环才能正常退出。

done = False 

def check(): 
    global done 
    while True: 
     if sys.stdin.read() == 'terminate': 
      done = True 
      break 
def sniff(someparams): 
    global done 
    done = False 
    input_thread = threading.Thread(target=check) 
    input_thread.daemon = True 
    input_thread.start() 
    while True: 
     #do some stuff 
     if done: 
      break 
+0

它没有帮助,代码仍然挂在沟通()。通信调用正确地设置为true,但sniff()中的while循环挂起后, – braheem38

+0

尝试在“while True”循环中添加打印语句,并在之后查看它是否已到达。 –