Python subprocess.run : donner à un seul processus enfant son propre environnement proxy
Passez un environnement copié à subprocess.run lorsqu'une commande enfant a besoin d'un proxy sans modifier l'environnement de Python pour d'autres tâches.
Un programme Python peut donner à une commande enfant son propre environnement proxy. Copiez les valeurs héritées, modifiez la copie et passez-la à 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'exemple suppose que curl est déjà disponible. Sa requête HTTPS peut utiliser un proxy HTTP qui prend en charge le tunnel requis. Pour ce contrôle d'un site public sans identifiants proxy configurés, un candidat de la liste de proxys HTTP peut remplacer le point de terminaison de l'exemple. L'enfant reçoit toujours le reste de l'environnement copié, y compris les éventuels réglages de contournement applicables.
Passer env donne à cette invocation cet environnement. La copie évite de modifier os.environ pour d'autres tâches du processus Python.
Affecter directement à os.environ a aussi un sens : cela met à jour l'environnement du processus Python et peut affecter les enfants lancés ensuite. Cela ne met pas à jour le shell qui a lancé Python, ni une application sans rapport, ni un enfant déjà en cours d'exécution.
Si l'intention est de modifier de futures commandes dans votre shell interactif, faites ce changement dans le shell. Si un seul outil lancé a besoin d'un autre chemin, gardez son environnement à côté de l'invocation de subprocess, comme montré.