Program w Pythonie może dać jednemu poleceniu potomnemu własne środowisko proxy. Skopiuj odziedziczone wartości, zmień kopię i przekaż ją do 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,
)

Przykład zakłada, że curl jest już dostępny. Jego żądanie HTTPS może korzystać z proxy HTTP obsługującego wymagany tunel. Do tego sprawdzenia publicznej witryny bez skonfigurowanych danych uwierzytelniających proxy kandydat z listy proxy HTTP może zastąpić punkt końcowy z przykładu. Proces potomny nadal otrzymuje resztę skopiowanego środowiska, w tym wszelkie mające zastosowanie ustawienia pomijania.

Przekazanie env daje temu wywołaniu to środowisko. Kopia zapobiega zmianie os.environ dla innych zadań w procesie Pythona.

Przypisanie bezpośrednio do os.environ też ma sens: aktualizuje środowisko procesu Pythona i może wpływać na procesy potomne uruchomione później. Nie aktualizuje powłoki, która uruchomiła Pythona, niepowiązanej aplikacji ani już działającego procesu potomnego.

Jeśli celem jest zmiana przyszłych poleceń w interaktywnej powłoce, zrób tę zmianę w powłoce. Jeśli tylko jedno uruchomione narzędzie potrzebuje innej trasy, trzymaj jego środowisko obok wywołania subprocess, jak pokazano.

Powiązane artykuły