Python subprocess.run: dar a un hijo su propio entorno de proxy
Pase un entorno copiado a subprocess.run cuando un comando hijo necesite un proxy sin cambiar el entorno de Python para otro trabajo.
Un programa de Python puede dar a un comando hijo su propio entorno de proxy. Copie los valores heredados, modifique la copia y pásala 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,
)El ejemplo supone que curl ya está disponible. Su solicitud HTTPS puede usar un proxy HTTP que admita el túnel necesario. Para esta comprobación de un sitio público sin credenciales de proxy configuradas, un candidato de la lista de proxies HTTP puede sustituir el punto de conexión del ejemplo. El hijo sigue recibiendo el resto del entorno copiado, incluidas las configuraciones de omisión que correspondan.
Pasar env da a esta invocación ese entorno. La copia evita cambiar os.environ para otro trabajo en el proceso de Python.
Asignar directamente a os.environ también tiene sentido: actualiza el entorno del proceso de Python y puede afectar a los hijos iniciados después. No actualiza el shell que inició Python, ni una aplicación no relacionada, ni un hijo que ya se está ejecutando.
Si la intención es cambiar comandos futuros en su shell interactivo, haga ese cambio en el shell. Si solo una herramienta lanzada necesita una ruta distinta, mantenga su entorno junto a la invocación de subprocess, como se muestra.