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 prosessmiljøet til Python 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.