Python 프로그램은 자식 명령 하나에 자체 프록시 환경을 줄 수 있습니다. 상속된 값을 복사하고, 복사본을 수정한 뒤 subprocess.run에 넘깁니다.

import os
import subprocess

child_env = os.environ.copy()
child_env["https_proxy"] = "http://proxy.example:8080"
subprocess.run(
    ["curl", "--head", "https://www.example.com/"],
    env=child_env,
    check=True,
    timeout=30,
)

예제는 curl이 이미 있다고 가정합니다. 이 HTTPS 요청은 필요한 터널을 지원하는 HTTP 프록시를 쓸 수 있습니다. 프록시 자격 증명을 설정하지 않은 이 공개 사이트 점검에는 HTTP 프록시 목록의 후보를 예제 엔드포인트 대신 사용할 수 있습니다. 자식은 복사한 환경의 나머지 부분과 해당되는 우회 설정도 그대로 받습니다.

env를 넘기면 이 호출만 그 환경을 사용합니다. 복사본을 쓰므로 Python 프로세스의 다른 작업을 위해 os.environ을 바꾸지 않습니다.

os.environ에 직접 대입하는 것도 의미가 있습니다. Python 프로세스 환경을 갱신하고 이후에 시작되는 자식에 영향을 줄 수 있습니다. 다만 Python을 실행한 셸, 무관한 애플리케이션, 이미 실행 중인 자식은 갱신하지 않습니다.

대화형 셸에서 앞으로의 명령을 바꾸려는 것이라면 셸에서 바꾸십시오. 실행한 도구 하나만 다른 경로가 필요하다면 그림처럼 그 환경을 subprocess 호출 옆에 두십시오.

관련 글