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é.

Súvisiace články