Python subprocess.run: ge ett barnkommando sin egen proxy-miljö
Skicka en kopierad miljö till subprocess.run när ett barnkommando behöver en proxy utan att ändra Pythons miljö för annat arbete.
Ett Python-program kan ge ett barnkommando sin egen proxy-miljö. Kopiera de ärvda värdena, ändra kopian och skicka den till 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,
)Exemplet förutsätter att curl redan är tillgängligt. Dess HTTPS-begäran kan använda en HTTP-proxy som stöder den tunnel som krävs. För denna kontroll av en offentlig webbplats utan konfigurerade proxy-uppgifter kan en kandidat från HTTP-proxylistan ersätta exemplets slutpunkt. Barnet får fortfarande resten av den kopierade miljön, inklusive eventuella tillämpliga kringgående inställningar.
Att skicka env ger detta anrop den miljön. Kopian förhindrar att os.environ ändras för annat arbete i Python-processen.
Tilldelning direkt till os.environ är också meningsfull: den uppdaterar Pythons processmiljö och kan påverka barn som startas efteråt. Den uppdaterar inte skalet som startade Python, ett orelaterat program eller ett barn som redan körs.
Om avsikten är att ändra framtida kommandon i ditt interaktiva skal, gör den ändringen i skalet. Om bara ett startat verktyg behöver en annan väg, håll dess miljö bredvid subprocess-anropet som visat.