2016-12-14 14 views
0

나는이 질문과 대답을 알고 있으며 다른 사이트에서 찾을 수있는 해결책을 찾았습니다.^그러나 내 문제를 해결할 수는 없습니다. 내 딜레마는 다음과 같습니다 (Windows의 경우) :파이썬 하위 프로세스가 통신을 중단합니다.

다른 스크립트 (sniffer.py)를 호출하는 Popen을 통해 하위 프로세스를 만들고있는 주 스크립트 (main.py)가 있습니다. 이후 나는 main.py에서 몇 가지 일을하고 있고 마지막으로 sniffer.py와 마침내 전체 서브 프로세스에서 무한 루프를 끝내기 위해 서브 프로세스에 문자를 보내기를 원한다.

main.py는

process = Popen(["python", "sniffer.py", receiverIP, senderIP, "udp", path],stdin=PIPE) 
#do some stuff 
process.communicate('terminate') 

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하지만 아무런 영향을 미치지 않습니다.

참고 : 나는 sniffer.py에서 while 루프 내 의사 소통() 호출 후 계속하지 않는 것으로 나타났습니다 subprocess 함께 할 수있는

+0

구체적으로 '작동하지 않음'을 구체적으로 지정할 수 있습니까? 디버깅을 돕기 위해 출력을 제공하십시오. – AndyW

+0

질문을 편집했습니다. – braheem38

답변

2

아무것도 (전체 스크립트는 중지되지 않습니다).

로컬로 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

도움이되지 않았습니다. 코드는 여전히 communications()에서 중단됩니다. 통신 호출 올바르게 true로 설정되어 있지만 sniff() sniff() while 루프를 while – braheem38

+0

while while 루프에 print 문을 추가하려고 시도하고 그 후에도 도달했는지 확인합니다. –