Un programma Python può dare a un comando figlio il proprio ambiente proxy. Copiate i valori ereditati, modificate la copia e passatela a 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,
)

L'esempio presuppone che curl sia già disponibile. La sua richiesta HTTPS può usare un proxy HTTP che supporta il tunnel richiesto. Per questo controllo di un sito pubblico senza credenziali proxy configurate, un candidato dalla lista di proxy HTTP può sostituire l'endpoint dell'esempio. Il figlio riceve comunque il resto dell'ambiente copiato, comprese le eventuali impostazioni di bypass applicabili.

Passare env assegna a questa invocazione quell'ambiente. La copia evita di modificare os.environ per altro lavoro nel processo Python.

Anche assegnare direttamente a os.environ ha senso: aggiorna l'ambiente del processo Python e può influire sui figli avviati in seguito. Non aggiorna la shell che ha avviato Python, né un'applicazione non correlata, né un figlio già in esecuzione.

Se l'intenzione è cambiare comandi futuri nella vostra shell interattiva, fate quella modifica nella shell. Se solo uno strumento avviato ha bisogno di un percorso diverso, tenete il suo ambiente accanto alla chiamata subprocess, come mostrato.

Articoli correlati