Python subprocess.run: dać jednemu procesowi potomnemu własne środowisko proxy
Przekaż skopiowane środowisko do subprocess.run, gdy jedno polecenie potomne potrzebuje proxy, bez zmiany środowiska Pythona dla innych zadań.
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.