본문 바로가기
Python/study

subprocess.run()

by 르면가게 2024. 12. 8.

subprocess.run() 개요

subprocess.run()은 명령을 실행하고 명령이 완료될 때까지 기다린 다음 결과를 CompletedProcess 객체로 반환합니다

기본 호출 형식

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None,
               capture_output=False, shell=False, cwd=None, timeout=None,
               check=False, encoding=None, errors=None, text=None, env=None,
               universal_newlines=None, **other_popen_kwargs)

주요 기능

  1. 명령 실행 및 결과 캡처:
    • 명령 실행 후 출력(stdout), 에러(stderr), 종료 코드(returncode) 등을 캡처할 수 있음.
    • 기본적으로 출력이 캡처되지 않음.
  2. 고급 옵션:
    • 입출력 설정: stdin, stdout, stderr
    • 환경 변수 설정: env
    • 타임아웃 설정: timeout
    • 에러 처리: check

중요 매개변수

1. args

  • 실행할 명령어와 인자를 리스트 형태로 제공.
  • subprocess.run(["ls", "-l"])

2. capture_output

  • True로 설정 시, stdout과 stderr를 캡처하여 CompletedProcess 객체에 저장.
  • result = subprocess.run(["ls", "-l"], capture_output=True, text=True) print(result.stdout)

3. text / universal_newlines

  • 출력 데이터를 텍스트 모드로 처리.
  • subprocess.run(["ls", "-l"], capture_output=True, text=True)

4. shell

  • 명령어를 셸에서 실행할지 여부(True/False).
  • subprocess.run("echo Hello World", shell=True

5. timeout

  • 명령 실행 제한 시간(초 단위).
  • subprocess.run(["sleep", "10"], timeout=5)

6. check

  • 종료 코드가 0이 아닐 경우 예외(CalledProcessError) 발생.
  • subprocess.run("exit 1", shell=True, check=True)

7. env

  • 새 프로세스의 환경 변수를 딕셔너리로 설정.
  • env = {"MY_VAR": "value"} subprocess.run(["printenv", "MY_VAR"], env=env, text=True)

사용 예제

기본 명령 실행

subprocess.run(["ls", "-l"])

출력 캡처

result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)

에러 처리

try:
    subprocess.run("exit 1", shell=True, check=True)
except subprocess.CalledProcessError as e:
    print(f"Error: {e}"

타임아웃 설정

subprocess.run(["sleep", "10"], timeout=5)  # 5초 후 TimeoutExpired 예외 발생

환경 변수 전달

env = {"CUSTOM_VAR": "value"}
result = subprocess.run(["printenv", "CUSTOM_VAR"], env=env, capture_output=True, text=True)
print(result.stdout)


주요 변경 사항

  • 버전 3.5: subprocess.run() 추가.
  • 버전 3.6: encoding 및 errors 매개변수 추가.
  • 버전 3.7: universal_newlines의 별칭으로 text 매개변수 추가.
  • 버전 3.12: Windows에서 shell=True 사용 시 보안 강화.

참고

'Python > study' 카테고리의 다른 글

@wrap  (0) 2025.01.15
unittest 모듈  (0) 2024.12.08
@staticmethod  (0) 2024.12.08
ast.literal_eval()  (0) 2024.12.08
__str__와 __repr__  (0) 2024.12.08