subprocess는 「파이썬에서 외부 프로그램(셸 명령·다른 실행파일)을 실행하고 결과를 받아 오는」 표준 라이브러리입니다.
파이썬으로 자동화 스크립트를 짤 때 거의 필수 도구입니다.
기본 사용.
import subprocess.
result = subprocess.run(["ls", "-la"], capture_output=True, text=True).
result.stdout — 표준 출력.
result.returncode — 종료 코드(0이면 성공).
명령은 리스트 형태로 주는 게 안전합니다(인자가 자동으로 분리).
셸 기능 사용.
shell=True 옵션으로 「셸 안에서 실행」 가능 — 파이프·리다이렉션 같은 셸 기능을 쓸 수 있지만 「셸 인젝션」 보안 위험이 있습니다.
사용자 입력을 그대로 넘기면 안 됩니다.
오래 걸리는 명령은 timeout 옵션으로.
subprocess.run([...], timeout=10) — 10초 내 안 끝나면 TimeoutExpired 예외.
멈추지 않게 막아 줍니다.
check=True로 「실패 시 자동 예외 발생」도 자주 씁니다.
더 정교한 제어가 필요하면 Popen.
process = subprocess.Popen([...], stdin=PIPE, stdout=PIPE).
실행 중인 프로세스와 직접 입출력을 주고받을 수 있습니다.
다만 보통은 run() 한 줄로 충분하며, Popen은 「장시간 실행되는 프로세스와 인터랙션」 같은 특수 상황에 씁니다.
한 줄 요약
subprocess는 외부 프로그램을 실행하고 결과를 받는 표준 라이브러리입니다.
run()이 표준이고 capture_output·text·timeout·check 옵션을 자주 씁니다.
shell=True는 보안 주의.
더 알아볼 것
- shell=True의 보안 위험
- Popen으로 프로세스와 인터랙션
- os.system은 왜 권장하지 않는가