subprocess란?
파이썬에서 외부 프로세스를 실행하고 상호작용하는 데 사용
이 모듈을 사용하면 새로운 프로세스를 생성하고 커뮤니케이션을 통해 입력을 전달하고 결과를 받아올 수 있습니다.
주요 함수로는 subprocess.Popen()과 subprocess.run()이 있습니다.
- subprocess.Popen(): 이 함수는 외부 명령어를 실행하고 상호작용할 수 있는 프로세스 객체를 반환합니다. 이를 통해 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)를 제어할 수 있습니다. 이를 통해 여러 파이프라인으로 데이터를 전달하고 프로세스 간 통신을 할 수 있습니다.
- subprocess.run(): 이 함수는 명령어를 실행하고 결과를 반환합니다. 주로 간단한 명령어를 실행하고 그 결과를 받아올 때 사용됩니다.
subprocess 모듈을 사용하면 외부 프로그램을 호출하고 그 결과를 캡처하거나, 다른 프로세스와 데이터를 교환하거나, 여러 프로세스 간의 통신을 할 수 있습니다. 이를 통해 파이썬은 다양한 운영 체제의 다른 프로그램과 상호작용할 수 있게 됩니다.
사용 예시)
import subprocess
import sys
# main.py
# 외부 프로세스(sub.py)를 실행하고 stdin과 stdout을 파이프로 연결하여 관리
with subprocess.Popen(["python", "sub.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True, encoding="utf-8") as process:
# 여러 줄의 데이터를 서브프로세스로 보냄
data1 = "Popen data 1\n"
data2 = "Popen data 2\n"
# 서브프로세스에 데이터를 전송
process.stdin.write(data1)
process.stdin.write(data2)
# 표준 입력 종료
process.stdin.close()
# 서브프로세스의 결과 읽기
output_data = process.stdout.read()
# 결과 출력
print("sub.py의 실행 결과:", output_data)
# ---------------------------------------------------------------------------------------------------
# sub.py
import sys
# 메인 프로세스(main.py)로부터 데이터를 받아 출력
for line in sys.stdin:
print("Received:", line.strip())
- main.py: 메인 스크립트
- subprocess.Popen()을 사용하여 외부 프로세스인 sub.py를 실행합니다.
- stdin=subprocess.PIPE로 설정하여 표준 입력을 파이프로 연결합니다.
- stdout=subprocess.PIPE로 설정하여 표준 출력을 파이프로 연결합니다.
- text=True로 설정하여 텍스트 모드로 처리합니다.
- encoding="utf-8"로 설정하여 UTF-8 인코딩을 사용합니다.
- with문을 사용하여 Popen 객체를 생성하고 관리합니다.
- process.stdin.write(data)를 사용하여 서브프로세스로 데이터를 전송합니다.
- process.stdin.close()를 호출하여 표준 입력을 닫습니다.
- process.stdout.read()를 사용하여 서브프로세스의 결과를 읽습니다.
- 결과를 출력합니다.
- sub.py: 서브 프로세스 스크립트
- sys.stdin을 통해 메인 프로세스로부터 데이터를 받습니다.
- 받은 데이터를 출력합니다.
이 코드를 실행하면 main.py가 sub.py를 실행하고, sub.py는 main.py로부터 전달받은 데이터를 출력합니다.