파이프를 사용해 표준출력 실행결과 입력 받기


표준 입출력을 파이프로 연결해서 다른 프로그램의 출력 내용을 읽어오려고 한다.


물론 기본 도큐먼트에도 좋은 설명과 예제들이 잘 정리되어있다.


기본적으로 subprocess 라는 라이브러리를 임포트 하면 되므로

자세한 사항은 아래의 링크를 참고하기 바라고

https://docs.python.org/2/library/subprocess.html


내가 원하는 dumpbin의 내용을 단방향으로 받아서 카운트 하는 예제를 설명하도록 하겠다.


import subprocess

import sys


def usage():

    print "\n"

    print sys.argv[0], " ", "exe file\n"

    exit()


exe_file = ""    


if len(sys.argv) <= 1:

    exe_file = ""

    usage()

else:

    exe_file = sys.argv[1]


p1 = subprocess.Popen(["dumpbin", "/disasm:nobytes", exe_file], stdout=subprocess.PIPE).stdout


count = 0


for line in p1:

    #print line

    count = count + 1


print "Total Count : ", count


아규먼트 입력을 받아서 서브 프로세스의 입력 값으로 사용하기 위해

sys 라이브러리를 임포트하여 첫번째 아규먼트를 입력값으로 처리한다.


if len(sys.argv) <= 1:

    exe_file = ""

    usage()

else:

    exe_file = sys.argv[1]


서브프로세스를 실행하면서 표준출력을 파이프로 연결하겠다고 지정하고

p1을 표준출력으로 지정한다.


p1 = subprocess.Popen(["dumpbin", "/disasm:nobytes", exe_file], stdout=subprocess.PIPE).stdout


표준출력을 출력하고 라인수를 카운트 한다.


for line in p1:

    #print line

    count = count + 1


파이프 개념만 알면 간단한 내용이지만

표준 문서에는 서브프로세스간의 파이프 연결만 설명되어있어

참고용으로 남겨둔다.


Posted by 휘프노스
,