Python subprocess.run: gje ein barneprosess sitt eige proxy-miljø
Send eit kopiert miljø til subprocess.run når ein barneprosess treng ein proxy utan å endre Pythons miljø for anna arbeid.
Eit Python-program kan gje ein barneprosess sitt eige proxy-miljø. Kopier dei arva verdiane, endre kopien og send han 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,
)Dømet føreset at curl alt er tilgjengeleg. HTTPS-førespurnaden kan bruke ein HTTP-proxy som støttar tunnelen som krevst. For denne kontrollen av ein offentleg nettstad utan konfigurerte proxy-påloggingsdata kan ein kandidat frå HTTP-proxy-lista erstatte endepunktet i dømet. Barneprosessen får framleis resten av det kopierte miljøet, inkludert eventuelle gjeldande omgåingsinnstillingar.
Å sende env gjev dette kallet det miljøet. Kopien hindrar at os.environ blir endra for anna arbeid i Python-prosessen.
Tildeling direkte til os.environ er også meiningsfull: det oppdaterer prosessmiljøet til Python og kan påverke barneprosessar som blir starta etterpå. Det oppdaterer ikkje skalet som starta Python, ein urelatert applikasjon eller ein barneprosess som alt køyrer.
Viss føremålet er å endre framtidige kommandoar i det interaktive skalet ditt, gjer den endringa i skalet. Viss berre eitt starta verktøy treng ein annan rute, hald miljøet ved sida av subprocess-kallet som vist.