subprocess로 명령 실행하기
외부 프로그램 실행하기
subprocess로 명령 실행하기은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
subprocess란 무엇인가요
subprocess 모듈을 사용하면 터미널에 명령을 입력하는 것처럼 파이썬 프로그램에서 외부 명령과 다른 프로그램을 실행할 수 있습니다.
import subprocess
result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)subprocess.run 기초
subprocess.run()은 권장되는 시작점입니다. 명령을 인수 목록으로 전달합니다. 프로그램 이름을 먼저 쓰고 각 인수를 별도의 항목으로 지정합니다.
import subprocess
result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)문자열이 아닌 목록을 사용하는 이유
목록을 전달하면 셸이 명령을 분석하지 않으므로 인용 부호 관련 버그와 셸 주입 위험을 방지할 수 있습니다. 각 요소는 하나의 인수입니다.
import subprocess
# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])CompletedProcess 객체
run()은 args, returncode, 그리고 캡처한 경우 출력이 들어 있는 CompletedProcess를 반환합니다. 코드 0은 성공을 의미합니다.
import subprocess
cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)반환 코드 확인
0이 아닌 반환 코드는 대개 명령이 실패했음을 의미합니다. 호출이 끝난 후 반환 코드를 직접 확인할 수 있습니다.
import subprocess
cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
print('command failed with', cp.returncode)check=True로 실패 시 예외 발생시키기
check=True를 전달하면 명령이 0이 아닌 코드로 종료될 때 run()이 자동으로 CalledProcessError를 발생시킵니다.
import subprocess
try:
subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
print('failed with code', e.returncode)인수 전달
추가 명령 인수는 목록 항목을 더 추가하는 것뿐입니다. 여기서는 디렉터리를 자세한 형식으로 표시합니다.
import subprocess
subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')timeout 설정
timeout을 사용하면 너무 오래 실행되는 명령을 중단할 수 있습니다. 이때 TimeoutExpired가 발생합니다.
import subprocess
try:
subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
print('command took too long, aborted')작업 디렉터리
cwd 인수를 사용하면 프로그램 자체의 작업 디렉터리는 변경하지 않고 특정 디렉터리에서 명령을 실행할 수 있습니다.
import subprocess
subprocess.run(['pwd'], cwd='/tmp')shell=True 옵션
shell=True를 사용하면 셸이 해석하는 하나의 명령 문자열을 전달합니다. 파이프와 와일드카드를 사용할 수 있지만 신뢰할 수 없는 입력과 함께 사용하면 위험합니다. 목록 형식을 선호하세요.
import subprocess
subprocess.run('echo hello && echo world', shell=True)os.system 피하기
오래된 os.system은 종료 코드만 반환하며 안전한 인수 전달이나 출력 캡처 기능을 제공하지 않습니다. 새로운 코드를 작성할 때는 모두 subprocess.run으로 대체하세요.
import subprocess
# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)빠른 확인
명령 실행에 대한 이해도를 확인해 보세요.
복습
subprocess로 명령 실행하기를 배웠습니다:
subprocess.run([...])은 외부 프로그램을 안전하게 실행합니다.returncode가 포함된CompletedProcess를 반환합니다.check=True는 실패 시 예외를 발생시키고,timeout은 느린 명령을 중단합니다.shell=True보다 목록 형식을 선호하세요.
다음: 명령의 출력 캡처하기입니다.
자주 묻는 질문
“subprocess로 명령 실행하기” 강의는 무료인가요?
네 — “subprocess로 명령 실행하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“subprocess로 명령 실행하기”에서 뭘 배우나요?
외부 프로그램 실행하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“subprocess로 명령 실행하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- subprocess로 명령 실행하기
- 출력 캡처하기
- 환경과 os 모듈
- 파일 작업을 위한 shutil