Программа на 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 даёт этому вызову ту среду. Копия не позволяет изменить os.environ для другой работы в процессе Python.

Присваивание напрямую в os.environ тоже осмысленно: оно обновляет среду процесса Python и может влиять на дочерние процессы, запущенные позже. Оно не обновляет оболочку, запустившую Python, несвязанное приложение или уже работающий дочерний процесс.

Если цель — изменить будущие команды в интерактивной оболочке, сделайте это изменение в оболочке. Если только одному запущенному инструменту нужен другой маршрут, держите его среду рядом с вызовом subprocess, как показано.

Похожие статьи