# subprocess 모듈: 외부 프로세스 실행하기 subprocess 모듈은 파이썬 프로그램 내에서 다른 프로그램이나 셸 명령어를 실행하고, 그 실행 결과를 제어할 수 있도록 해주는 강력한 도구입니다. 즉, 파이썬 스크립트 내에서 외부 프로그램을 호출하여 마치 하나의 프로그램처럼 사용할 수 있게 해줍니다. * 시스템 명령 실행: ls, cd, grep 등과 같은 시스템 명령을 파이썬 코드에서 직접 실행할 수 있습니다. * 외부 프로그램 실행: 다른 언어로 작성된 프로그램을 파이썬에서 호출하여 결과를 얻을 수 있습니다. * 파이프라인 구축: 여러 프로그램의 표준 입력과 출력을 연결하여 복잡한 작업을 수행할 수 있습니다. * 자동화: 반복적인 작업을 자동화하기 위해 스크립트를 작성할 때 유용합니다. ## 주요 함수 * `subprocess.run()`: 가장 일반적으로 사용되는 함수로, 명령을 실행하고 결과를 반환합니다. * `subprocess.Popen()`: 프로세스를 생성하고 더 세밀하게 제어할 수 있는 클래스입니다. ```python import subprocess # 명령 실행 result = subprocess.run(['ls', '-la'], capture_output=True, text=True) # 실행 결과 출력 print(result.stdout) print(result.stderr) ``` 위 예시에서는 ls -la 명령을 실행하고, 그 결과를 stdout과 stderr 속성을 통해 얻을 수 있습니다. ```python import subprocess # 프로세스 생성 process = subprocess.Popen(['ping', 'google.com'], stdout=subprocess.PIPE) # 출력 읽기 for line in process.stdout: print(line.decode('utf-8').strip()) # 프로세스 종료 process.wait() ``` ### 주요 옵션 * args: 실행할 명령어 또는 명령어 리스트 * cwd: 작업 디렉토리 * env: 환경 변수 * stdin, stdout, stderr: 표준 입출력 스트림 * shell: True로 설정하면 셸을 통해 명령을 실행합니다. ## 주의 사항 * 보안: 사용자 입력을 직접 명령어에 포함시키는 것은 보안 문제를 야기할 수 있습니다. * 에러 처리: `subprocess.run()`은 CompletedProcess 객체를 반환하며, 이를 통해 프로세스의 종료 상태를 확인하고 에러를 처리할 수 있습니다. * 비동기 처리: asyncio 모듈과 함께 사용하여 비동기 방식으로 프로세스를 실행할 수 있습니다.