2012-06-01 2 views
1

안녕하세요 저는 Python 프로그래밍 언어에 새로운 것이므로 하나의 스크립트를 작성하는 데 문제가 발생했습니다. 나는 내가 파이썬 스크립트의 변수에서 tcpdump 명령을 실행할 때 얻을 수있는 stdout의 출력을 저장하려고하지만, tcpdump로 필터링 된 모든 패킷을 전송하여 길이를 수집하려고하므로 tpcdump 명령을 계속 실행하고 싶습니다. (필자가 작성한 필터 사용). 시도 :Python에서 진행중인 프로세스의 stdout 출력을 읽는 방법?

fin, fout = os.popen4(comand) 
    result = fout.read() 
    return result 

그냥 멈 춥니 다.

답변

3

자식 프로세스가 종료 될 때까지 os.popen4이 반환되지 않기 때문에 중단되는 것으로 추측합니다. 대신 subprocess.Popen을 사용해야합니다.

import subprocess 
import shlex #just so you don't need break "comand" into a list yourself ;) 

p=subprocess.Popen(shlex.split(comand),stdout=subprocess.PIPE) 
first_line_of_output=p.stdout.readline() 
second_line_of_output=p.stdout.readline() 
... 
+0

고맙습니다. 그게 효과가 있었어. 처음에는 명령 줄에서 시도했지만 제대로 작동하지 않는 것 같았지만 스크립트를 작성했을 때 그렇게했습니다. 또한 신속한 주셔서 감사합니다 :) – primero