Python subprocess.run: dajte enemu podrejenemu ukazu lastno proxy okolje
Posredujte kopirano okolje v subprocess.run, ko en podrejeni ukaz potrebuje proxy, ne da bi spremenili okolje Pythona za drugo delo.
Program v Pythonu lahko enemu podrejenemu ukazu da lastno proxy okolje. Kopirajte podedovane vrednosti, spremenite kopijo in jo posredujte v 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,
)Primer predpostavlja, da je curl že na voljo. Njegova zahteva HTTPS lahko uporabi proxy HTTP, ki podpira potreben tunel. Za to preverjanje javnega mesta brez nastavljenih proxy poverilnic lahko kandidat s seznama proxyjev HTTP zamenja končno točko iz primera. Podrejeni proces še vedno prejme preostanek kopiranega okolja, vključno z morebitnimi veljavnimi nastavitvami zaobidenja.
Posredovanje env da temu klicu to okolje. Kopija prepreči spreminjanje os.environ za drugo delo v procesu Pythona.
Tudi neposredna dodelitev v os.environ je smiselna: posodobi okolje procesa Pythona in lahko vpliva na podrejene procese, zagnane pozneje. Ne posodobi lupine, ki je zagnala Python, nepovezane aplikacije ali podrejenega procesa, ki že teče.
Če je namen spremeniti prihodnje ukaze v vaši interaktivni lupini, naredite to spremembo v lupini. Če potrebuje drugačno pot le eno zagnano orodje, imejte njegovo okolje ob klicu subprocess, kot je prikazano.