메뉴 닫기

파이썬 subprocess 활용법과 실전 자동화 예제 총정리

파이썬 subprocess 활용법과 실전 자동화 예제 총정리

⚙️ 외부 프로그램 제어부터 파일 변환까지, 실무 자동화를 파이썬으로 구현해보세요!

파이썬을 다루다 보면 외부 프로그램을 실행하거나 시스템 명령어를 제어하고 싶을 때가 종종 생깁니다.
예를 들어, 동영상 파일을 변환하거나, 시스템의 디스크 용량을 점검하거나, 특정 자동화된 배치 작업을 실행해야 할 때 말이죠.
이럴 때 딱 필요한 기능이 바로 subprocess 모듈입니다.

subprocess는 외부 명령 실행을 파이썬 코드로 제어할 수 있도록 해주는 강력한 도구입니다.
단순한 커맨드 실행부터 표준 입력과 출력을 연결하여 파이프라인 처리까지 가능하죠.
이 글에서는 subprocess 모듈의 핵심 개념은 물론, 실무에서 자주 쓰이는 예제까지 하나하나 살펴볼 예정입니다.
자동화 스크립트를 짤 때 꼭 알아둬야 할 필수 모듈인 만큼, 지금 제대로 배워두면 앞으로 개발 업무가 훨씬 효율적으로 바뀔 거예요.



🔗 subprocess 모듈이란 무엇인가요?

파이썬의 subprocess 모듈은 외부 프로그램을 실행하고 그 결과를 파이썬 코드로 제어할 수 있도록 해주는 내장 라이브러리입니다.
운영체제 수준에서 제공하는 명령어를 파이썬에서 직접 실행하거나, 여러 명령을 연속 처리할 수 있어 자동화 작업에 매우 유용하죠.

기존에는 os.system()이나 popen() 등을 사용했지만, subprocess는 이보다 훨씬 유연하고 안전하게 외부 프로세스를 다룰 수 있습니다.
특히 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)의 스트림을 자유롭게 제어할 수 있다는 점에서 스크립트 자동화, 배치 처리, 로그 수집 등에 자주 쓰입니다.

  • ⚙️subprocess.run()으로 외부 명령을 가장 간단하게 실행할 수 있어요.
  • 🔧stdout, stderr 옵션으로 출력 결과를 직접 제어할 수 있습니다.
  • 🧩다양한 파라미터를 통해 복잡한 명령 체인도 처리할 수 있습니다.
CODE BLOCK
import subprocess

# 기본 명령 실행 예제
subprocess.run(["ls", "-l"])

💡 TIP: subprocess는 리눅스, 맥, 윈도우 등 운영체제 구분 없이 사용할 수 있으며, 환경에 따라 명령어만 조정해주면 됩니다.

subprocess를 활용하면 단순히 명령을 실행하는 것을 넘어서, 프로그램 간 데이터 흐름을 파이썬으로 제어하고 자동화된 시스템을 구성할 수 있는 기반을 마련할 수 있습니다.

⚙️ 기본 사용법과 run 함수 이해하기

subprocess 모듈에서 가장 자주 사용되는 함수는 run()입니다.
이 함수는 외부 명령어를 실행하고, 실행 결과를 반환하는 방식으로 동작합니다.
간단한 명령부터 고급 옵션까지 모두 지원하기 때문에 대부분의 경우 run 함수 하나로 충분히 작업을 수행할 수 있습니다.

기본적으로 run 함수는 명령어를 리스트(list) 형태로 전달하는 것을 권장합니다.
이 방식은 공백이나 특수문자가 포함된 명령어도 안전하게 처리할 수 있어 보안상 더 안전하죠.

  • 📂run([“명령어”, “옵션”]) 구조로 실행합니다.
  • 🔁capture_output=True를 설정하면 결과를 변수로 받을 수 있습니다.
  • 📄text=True 또는 encoding을 지정해 문자열로 쉽게 처리할 수 있어요.
CODE BLOCK
import subprocess

# 명령 실행 및 출력 결과 받기
result = subprocess.run(["echo", "Hello World"], capture_output=True, text=True)

print("출력 결과:", result.stdout)

⚠️ 주의: shell=True 옵션은 임의 명령어 실행에 취약할 수 있으므로, 사용자 입력을 직접 전달하는 경우에는 반드시 피하는 것이 좋습니다.

run 함수는 결과로 CompletedProcess 객체를 반환하며, 이를 통해 returncode, stdout, stderr를 포함한 다양한 정보를 확인할 수 있습니다.
즉, 단순 실행부터 복잡한 조건 분기까지 유연하게 대응할 수 있는 범용적인 함수인 셈이죠.



🧰 파이프라인 처리와 표준 입출력 연결

subprocess 모듈은 단순히 명령어 하나를 실행하는 것에 그치지 않고, 여러 외부 명령어를 파이프라인 형태로 연결하거나 표준 입력(stdin), 출력(stdout), 에러(stderr)을 정교하게 제어할 수 있도록 설계되어 있습니다.

특히 쉘에서 자주 사용하는 grep, sort, awk 등을 연결해 결과를 처리하거나, 다른 프로그램의 출력 결과를 파이썬 코드에서 바로 받아오는 식의 작업이 가능합니다.
이처럼 데이터를 흘려보내는 구조는 실무 자동화에서 매우 큰 역할을 하죠.

  • 🔗stdout=subprocess.PIPE로 출력을 연결할 수 있습니다.
  • ➡️stdin을 사용하면 이전 명령의 결과를 다음 명령에 전달할 수 있어요.
  • 🚧복잡한 파이프라인 연결 시 Popen 객체를 사용하는 것이 더 유리할 수 있습니다.
CODE BLOCK
import subprocess

# ls 결과를 grep으로 전달하는 예제
p1 = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", ".py"], stdin=p1.stdout, stdout=subprocess.PIPE)

output = p2.communicate()[0]
print(output.decode())

💡 TIP: 여러 명령어를 연속 실행할 경우 Popen을 사용해 파이프라인 구조를 구현하면 훨씬 유연하게 처리할 수 있습니다.

이런 방식은 데이터 전처리, 대용량 로그 분석, 시스템 상태 점검 자동화 같은 작업에서 매우 효과적으로 활용됩니다.
파이썬 코드 내에서 외부 명령어들을 자유롭게 연결하고 제어할 수 있다는 점이 바로 subprocess의 강점입니다.

🛠️ 실무 자동화 예제 모음

이제 실제로 subprocess 모듈을 활용한 자동화 예제들을 살펴보겠습니다.
실제 업무에서 자주 사용되는 상황을 중심으로, 파이썬 코드 한 줄로 어떤 작업이 자동화될 수 있는지 보여드릴게요.

단순한 파일 목록 출력부터 시작해서, PDF 변환, 시스템 백업, 파일 인코딩 변환 등 복잡한 명령어도 파이썬 코드에 녹여내면 훨씬 깔끔하고 효율적인 자동화 스크립트를 만들 수 있습니다.

📁 폴더 내 파일 목록 저장하기

CODE BLOCK
import subprocess

with open("file_list.txt", "w") as f:
    subprocess.run(["ls", "-al"], stdout=f)

📦 PDF 파일 자동 변환 (예: LibreOffice 활용)

CODE BLOCK
# LibreOffice CLI로 문서를 PDF로 변환
subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf", "input.docx"])

🧼 로그 정리 및 백업 스크립트 실행

CODE BLOCK
# 쉘 스크립트로 백업 자동화
subprocess.run(["bash", "backup_logs.sh"])

💎 핵심 포인트:
subprocess는 외부 프로그램을 파이썬의 일부처럼 다룰 수 있게 해주기 때문에, 반복되는 명령어나 작업들을 자동화하는 데 최적화되어 있습니다.

여기서 소개한 예제들은 시작일 뿐입니다.
여러분의 업무나 프로젝트에 맞춰 다양한 프로그램을 파이썬 스크립트로 제어하는 방식으로 확장해 보세요.
GUI가 없는 환경이나 원격 서버에서도 매우 유용하게 쓰일 수 있습니다.



💡 보안과 예외 처리 시 주의할 점

subprocess 모듈은 매우 강력한 도구이지만, 그만큼 주의해야 할 보안 이슈와 예외 상황도 존재합니다.
특히 외부 명령을 직접 실행하는 특성상, 입력값이 신뢰되지 않거나 예외 처리를 생략한 채 실행할 경우 시스템에 악영향을 줄 수 있어요.

따라서 subprocess를 사용할 때는 항상 명령어 구성과 예외 처리에 신중해야 하며, 보안을 고려한 설계가 필수입니다.
아래 항목들은 실무에서 subprocess를 사용할 때 꼭 체크해야 할 보안 및 안정성 관련 팁들입니다.

  • 🚫shell=True는 가능한 한 사용하지 마세요. 명령어 주입 취약점에 노출될 수 있습니다.
  • 🛡️사용자 입력값은 반드시 검증 또는 필터링해야 합니다.
  • ⚠️try-except로 예외 발생 시 대처 로직을 반드시 작성하세요.
  • 명령어를 문자열로 조합하지 말고 리스트 형태로 안전하게 분리하세요.
CODE BLOCK
import subprocess

try:
    result = subprocess.run(["ls", "-l"], capture_output=True, text=True, check=True)
    print(result.stdout)
except subprocess.CalledProcessError as e:
    print("명령 실행 중 오류 발생:", e)

⚠️ 주의: check=True 옵션을 사용하면 명령 실행이 실패했을 때 예외를 자동으로 발생시켜 예외 처리를 쉽게 할 수 있습니다.

subprocess는 시스템 명령을 직접 실행하는 만큼, 잘못된 사용은 보안 사고나 시스템 오류로 이어질 수 있습니다.
기능만큼이나 안정성과 보안성을 우선으로 고려하며 사용하는 습관이 무엇보다 중요합니다.

❓ 자주 묻는 질문 (FAQ)

subprocess는 어떤 경우에 사용하나요?
외부 프로그램 실행, 쉘 명령 제어, 시스템 자동화 작업 등 외부 환경과 상호작용할 때 사용됩니다. 예: ffmpeg로 영상 변환, rsync로 백업 등.
run 함수와 Popen의 차이는 무엇인가요?
run은 명령 실행 후 종료까지 기다리는 방식이며 간단한 작업에 적합합니다. Popen은 명령을 백그라운드로 실행하거나 파이프라인 처리 등 복잡한 제어가 가능합니다.
subprocess에서 shell=True는 꼭 피해야 하나요?
shell=True는 명령어 주입 공격에 취약할 수 있어 사용 시 주의가 필요합니다. 사용자 입력이 포함된 경우에는 절대 사용하지 않는 것이 안전합니다.
실행 결과를 문자열로 바로 받는 방법은?
run 함수에 capture_output=True와 text=True를 함께 설정하면, stdout과 stderr를 문자열로 쉽게 받아올 수 있습니다.
명령어가 실패했을 때 자동으로 오류를 감지할 수 있나요?
check=True 옵션을 사용하면 명령어 실행이 실패했을 때 CalledProcessError 예외가 발생합니다. 이를 통해 오류를 자동으로 감지할 수 있습니다.
윈도우 환경에서도 subprocess가 작동하나요?
네, subprocess는 윈도우에서도 잘 작동합니다. 다만 명령어 포맷이나 파일 경로 표기에 차이가 있으니 OS별 조건 분기가 필요할 수 있습니다.
subprocess로 GUI 프로그램도 실행할 수 있나요?
가능합니다. 예를 들어 subprocess.run([“notepad”])처럼 GUI 프로그램도 실행할 수 있습니다. 단, 백그라운드 실행 여부는 OS와 프로그램에 따라 다릅니다.
subprocess를 사용할 때 디버깅이 어려워요. 해결 방법은?
실행 명령을 print로 출력해보거나, stderr 출력을 logging에 기록하는 방식으로 디버깅이 가능합니다. returncode와 stdout도 반드시 확인하세요.

🚀 subprocess로 외부 명령 제어, 실무 자동화 완성하기

파이썬의 subprocess 모듈은 단순한 명령 실행을 넘어, 다양한 외부 프로그램을 파이썬 스크립트로 직접 제어할 수 있게 해주는 매우 실용적인 도구입니다.
이 글에서는 subprocess의 기본 사용법부터 run과 Popen의 차이, 파이프라인 처리, 실무 자동화 예제, 그리고 보안까지 폭넓게 살펴봤습니다.
파일 변환, 시스템 점검, 로그 처리, 백업 스크립트 등 반복되는 작업을 효율적으로 자동화할 수 있는 기반을 마련할 수 있죠.
단순한 편의성을 넘어, 실무 속도와 정확도를 동시에 높일 수 있는 강력한 무기가 되어줄 것입니다.
이제 여러분도 subprocess를 활용해 반복적인 작업을 자동화하고, 파이썬 자동화의 세계로 한 걸음 더 나아가 보세요.


🏷️ 관련 태그 : 파이썬자동화, subprocess, 외부명령실행, 쉘스크립트, 시스템제어, 파이썬실무, run함수, Popen, 자동화스크립트, 파일변환