Python subprocess.run: gee een kindproses sy eie proxy-omgewing
Gee 'n gekopieerde omgewing aan subprocess.run wanneer een kindopdrag 'n proxy nodig het sonder om Python se omgewing vir ander werk te verander.
'n Python-program kan aan een kindopdrag sy eie proxy-omgewing gee. Kopieer die oorgeërfde waardes, verander die kopie en gee dit aan 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,
)Die voorbeeld aanvaar dat curl reeds beskikbaar is. Sy HTTPS-versoek kan 'n HTTP-proxy gebruik wat die vereiste tonnel ondersteun. Vir hierdie kontrole van 'n publieke webwerf sonder opgestelde proxy-geloofsbriewe kan 'n kandidaat uit die HTTP-proxylys die voorbeeld-eindpunt vervang. Die kindproses ontvang steeds die res van die gekopieerde omgewing, insluitend enige toepaslike bypass-instellings.
Deur env deur te gee, kry hierdie aanroep daardie omgewing. Die kopie verhoed dat os.environ verander word vir ander werk in die Python-proses.
Om direk aan os.environ toe te wys, is ook betekenisvol: dit werk Python se prosesomgewing by en kan kindprosesse beïnvloed wat daarna begin word. Dit werk nie die dop wat Python begin het nie, nie 'n onverwante program nie, en nie 'n kindproses wat reeds loop nie.
As die bedoeling is om toekomstige opdragte in jou interaktiewe dop te verander, maak daardie verandering in die dop. As slegs een gestarte instrument 'n ander roete nodig het, hou sy omgewing langs die subprocess-aanroep soos getoon.