Python subprocess.run: gi én barneprosess sitt eget proxy-miljø
Send et kopiert miljø til subprocess.run når én barneprosess trenger en proxy uten å endre Pythons miljø for annet arbeid.
Et Python-program kan gi én barneprosess sitt eget proxy-miljø. Kopier de arvede verdiene, endre kopien og send den til 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,
)Eksempelet forutsetter at curl allerede er tilgjengelig. HTTPS-forespørselen kan bruke en HTTP-proxy som støtter tunnelen som kreves. For denne kontrollen av et offentlig nettsted uten konfigurerte proxy-påloggingsdata kan en kandidat fra HTTP-proxy-listen erstatte endepunktet i eksempelet. Barneprosessen mottar fortsatt resten av det kopierte miljøet, inkludert eventuelle gjeldende omgåelsesinnstillinger.
Å sende env gir dette kallet det miljøet. Kopien hindrer at os.environ endres for annet arbeid i Python-prosessen.
Tildeling direkte til os.environ er også meningsfullt: det oppdaterer Python-prosessens miljø og kan påvirke barneprosesser som startes etterpå. Det oppdaterer ikke skallet som startet Python, en urelatert applikasjon eller en barneprosess som allerede kjører.
Hvis hensikten er å endre fremtidige kommandoer i det interaktive skallet ditt, gjør den endringen i skallet. Hvis bare ett startet verktøy trenger en annen rute, hold miljøet ved siden av subprocess-kallet som vist.