본문 바로가기

IT/프로그래밍

[python] 외부 프로세스 실행한 결과를 string을 받기

728x90

#!/usr/bin/python

import subprocess

def getCallResult(cmdARGS):

  fd_popen = subprocess.Popen(cmdARGS.split(), stdout=subprocess.PIPE).stdout

  data = fd_popen.read().strip()

  fd_popen.close()

  return data

data = getCallResult("ls -la")

print (data)

결과)

$ python test.py

합계 524

drwxrwxr-x  4 parkmo parkmo   4096  1월 27 16:30 .

drwxrwxr-x 45 parkmo parkmo   4096  1월 27 11:59 ..

drw-rw-r--  1 parkmo parkmo    421  1월 27 12:01 test.py

..

..

1) subprocess.Popen 호출할때 split으로 하지 않으려면 아래처럼 []로 해줘야한다.

subprocess.Popen(["ls", "-la"], stdout=subprocess.PIPE).stdout

2) string으로 넣지 않고 하려면 그냥

  fd_popen = subprocess.Popen(cmdARGS.split(), stdout=subprocess.PIPE).wait()

식으로 해서 Block걸고 해도 되고 NonBlock도 지원하니까 필요에 따라 NonBlock으로 해도 되고 한다. 

(테스트는 파이썬 2.4 대에서 했다.)

3.x대 부터인가 에서는 print할때 무조건 print(...) 형태를 써야함에 주의.

728x90