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