Python subprocess.run: dajte jednoj podređenoj komandi vlastito proxy okruženje
Proslijedite kopirano okruženje u subprocess.run kada jednoj podređenoj komandi treba proxy bez promjene Python okruženja za druge poslove.
Python program može jednoj podređenoj komandi dati vlastito proxy okruženje. Kopirajte naslijeđene vrijednosti, promijenite kopiju i proslijedite je u 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,
)Primjer pretpostavlja da je curl već dostupan. Njegov HTTPS zahtjev može koristiti HTTP proxy koji podržava potreban tunel. Za ovu provjeru javne stranice bez konfiguriranih proxy vjerodajnica, kandidat s liste HTTP proxyja može zamijeniti krajnju točku iz primjera. Podređeni proces i dalje prima ostatak kopiranog okruženja, uključujući sve primjenjive postavke zaobilaženja.
Prosljeđivanje env daje ovom pozivu to okruženje. Kopija sprječava promjenu os.environ za druge poslove u Python procesu.
Dodjela izravno u os.environ također ima smisla: ažurira okruženje Python procesa i može utjecati na podređene procese pokrenute poslije. Ne ažurira ljusku koja je pokrenula Python, nepovezanu aplikaciju ni podređeni proces koji već radi.
Ako je namjera promijeniti buduće naredbe u vašoj interaktivnoj ljusci, napravite tu promjenu u ljusci. Ako samo jednom pokrenutom alatu treba druga ruta, držite njegovo okruženje uz poziv subprocess, kako je prikazano.