subprocess
새로운 프로세스를 생성하고, 프로세스의 입출력 및 에러 결과에 대한 반환값을 얻을 수 있도록 하는 모듈이다. 파이썬 코드를 통해 다른 프로세스를 실행하고, 그 과정에서 발생하는 데이터의 입출력을 제어할 수 있다.
os.system, os.spawn* 모듈을 대체한다.
이 글에서는 subprocess 모듈의 사용방법을 간단히 정리한다. 참고로 Linux 환경에서 실행할 것이다.
run
매개변수로 전달받은 명령어를 실행하는 가장 일반적인 함수이다. 명령이 완료되면 CompletedProcess 인스턴스를 반환한다.
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None,
timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None,
**other_popen_kwargs)
# args : 실행할 명령어를 공백으로 나눈 문자열 리스트
# stdin, stdout, stderr : 표준 입력, 출력, 에러 설정
# input : 입력 데이터
# capture_output : True 지정 시 실행 결과값을 변수에 저장
# shell : shell 출력 여부
# cwd : 현재 실행 디렉터리 반환
# timeout : 프로세스 timeout 설정
# check : 0이 아닌 리턴코드로 종료 시 CalledProcessError 발생
# encoding : 반환 결과의 encoding 지정
# errors :
# text : True 지정 시 결과값을 string으로 출력
# env : 지정한 환경에서 실행
# universal_newlines :
# other_popen_kwargs :
예시 )
import shlex
import subprocess
cmd = 'ls -l'
result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
print(result)
참고
Python 3.5 이전에는 call, check_call, check_output 함수를 이용했으나, Python 3.5 이후로는 run 함수로 대체되어 사용된다.
- subprocess.call : 명령어 실행
- subprocess.check_call : 프로세스 리턴 코드가 0이 아니면 CalledProcessError 발생
- subprocess.check_output : 프로세스 출력 문자열을 변수에 저장. 프로세스 리턴 코드가 0이 아니면 CalledProcessError 발생
세 함수는 호환성을 위해 남아있다.
참고 문서
https://docs.python.org/ko/3/library/subprocess.html
[Python subprocess - 1] 파이썬에서 외부 프로세스 실행 및 입출력 제어 (기본개념 및 예제)