Files
python-examples/doc/19_subprocess.md
2025-01-23 11:02:27 +09:00

51 lines
2.3 KiB
Markdown

# 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 모듈과 함께 사용하여 비동기 방식으로 프로세스를 실행할 수 있습니다.