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

2.3 KiB

subprocess 모듈: 외부 프로세스 실행하기

subprocess 모듈은 파이썬 프로그램 내에서 다른 프로그램이나 셸 명령어를 실행하고, 그 실행 결과를 제어할 수 있도록 해주는 강력한 도구입니다. 즉, 파이썬 스크립트 내에서 외부 프로그램을 호출하여 마치 하나의 프로그램처럼 사용할 수 있게 해줍니다.

  • 시스템 명령 실행: ls, cd, grep 등과 같은 시스템 명령을 파이썬 코드에서 직접 실행할 수 있습니다.
  • 외부 프로그램 실행: 다른 언어로 작성된 프로그램을 파이썬에서 호출하여 결과를 얻을 수 있습니다.
  • 파이프라인 구축: 여러 프로그램의 표준 입력과 출력을 연결하여 복잡한 작업을 수행할 수 있습니다.
  • 자동화: 반복적인 작업을 자동화하기 위해 스크립트를 작성할 때 유용합니다.

주요 함수

  • subprocess.run(): 가장 일반적으로 사용되는 함수로, 명령을 실행하고 결과를 반환합니다.
  • subprocess.Popen(): 프로세스를 생성하고 더 세밀하게 제어할 수 있는 클래스입니다.
import subprocess

# 명령 실행
result = subprocess.run(['ls', '-la'], capture_output=True, text=True)

# 실행 결과 출력
print(result.stdout)
print(result.stderr)

위 예시에서는 ls -la 명령을 실행하고, 그 결과를 stdout과 stderr 속성을 통해 얻을 수 있습니다.

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