궁금한게 많은 개발자 노트

[ python ] 시스템 명령어 사용 본문

Language

[ python ] 시스템 명령어 사용

궁금한게 많은 개발자 2020. 6. 18. 14:51

C/C++에서와 마찬가지로 python에서도 system명령어를 사용할 수 있다. 
system으로 명령어를 사용하는 경우에는 필요한 명령어가 실행만되면 되는 경우도 있지만,
실행한 결과를 문자열로 받고 싶거나, stdout으로 출력하고자 하는경우가 있을 것이다.

우선, 시스템 명령어를 실행하기위해는 2가지 정도의 방법이 존재한다고 알고있다. 
os모듈의 system함수를 사용하거나 subprocess모듈을 사용할수있다.

아래는 os모듈의 사용예제이다.

import os

os.system('ls')

위와 같이 예제를 작성하고 실행시킨다면 stdout으로 ls의 결과물을 볼수있을것이다. 하지만 만약 ls의 결과를 문자열로 저장하여 parsing을 해서 원하는 내용만 저장하고 싶다면?

아래와 같이 읽기모드형태의 파일객체를 return받아 read()를 통하여 문자열로 출력하거나, 문자열을 저장한다음 원하는 parsing을 할수도 있을것 같다. 하지만 아직 뭔가좀 불편하고 번거로운것 같다.

import os

f = os.popen("dir")
print(f.read())

 

그래서 자주 사용하는게 subprocess모듈의 check_out함수이다.
subprocess.check_out("cmd", shell=True, encoding='utf-8') 형태로 사용되는데,
사용하고자 하는 명령어가 첫번째 인자로 들어가고, 두번째인자로는 shell에서 실행될것인지의 여부, 세번째로는 명령어 실행의 결과가 바이너리 형태로 나오는데 txt파일로 저장하기 위한 encoding format을 적어주는것이다.

output = subprocess.check_out("cmd", shell=True, encoding='utf-8')

만약, encoding인자를 주지않고 subprocess.check_out("cmd", shell=True)로 사용한 후 string으로 받고싶다면 아래와 같이 decode함수를 사용하여 byte형태를 string형태로 바꿔주면 된다.

output = subprocess.check_out("cmd", shell=True).decode()

 subprocess 모듈은 이외에도 다양한 방법으로 사용이 되지만, system명령어의 출력결과를 얻을 때는 이렇게 사용된다.

Comments