Python subprocess.run: dajte jednému podriadenému príkazu vlastné proxy prostredie
Odovzdajte kopírované prostredie do subprocess.run, keď jeden podriadený príkaz potrebuje proxy bez zmeny prostredia Pythonu pre inú prácu.
Program v Pythone môže jednému podriadenému príkazu dať vlastné proxy prostredie. Skopírujte zdedené hodnoty, zmeňte kópiu a odovzdajte ju do 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,
)Príklad predpokladá, že curl je už dostupný. Jeho požiadavka HTTPS môže použiť HTTP proxy, ktorá podporuje potrebný tunel. Na túto kontrolu verejnej stránky bez nastavených prihlasovacích údajov k proxy môže kandidát zo zoznamu HTTP proxy nahradiť koncový bod z príkladu. Podriadený proces stále dostáva zvyšok skopírovaného prostredia vrátane akýchkoľvek platných nastavení obchádzania.
Odovzdanie env dáva tomuto volaniu to prostredie. Kópia zabraňuje zmene os.environ pre inú prácu v procese Pythonu.
Priradenie priamo do os.environ má tiež zmysel: aktualizuje prostredie procesu Pythonu a môže ovplyvniť podriadené procesy spustené neskôr. Neaktualizuje shell, ktorý spustil Python, nesúvisiacu aplikáciu ani podriadený proces, ktorý už beží.
Ak je zámerom zmeniť budúce príkazy v interaktívnom shelli, urobte tú zmenu v shelli. Ak potrebuje inú cestu len jeden spustený nástroj, držte jeho prostredie pri volaní subprocess, ako je znázornené.