Python subprocess.run: dați unui singur proces fiu propriul mediu proxy
Transmiteți un mediu copiat către subprocess.run atunci când o comandă fiu are nevoie de un proxy fără a schimba mediul Python pentru altă lucrare.
Un program Python poate da unei singure comenzi fiu propriul mediu proxy. Copiați valorile moștenite, modificați copia și transmiteți-o către 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,
)Exemplul presupune că curl este deja disponibil. Cererea sa HTTPS poate folosi un proxy HTTP care acceptă tunelul necesar. Pentru această verificare a unui site public fără acreditări proxy configurate, un candidat din lista de proxy HTTP poate înlocui punctul final din exemplu. Procesul fiu primește în continuare restul mediului copiat, inclusiv eventualele setări de ocolire aplicabile.
Transmiterea env oferă acestui apel acel mediu. Copia evită modificarea os.environ pentru altă lucrare din procesul Python.
Atribuirea directă către os.environ are și ea sens: actualizează mediul procesului Python și poate afecta procesele fiu pornite ulterior. Nu actualizează shell-ul care a pornit Python, nici o aplicație nelegată, nici un proces fiu deja în execuție.
Dacă intenția este să schimbați comenzi viitoare în shell-ul interactiv, faceți acea schimbare în shell. Dacă doar un instrument pornit are nevoie de altă rută, păstrați-i mediul lângă apelul subprocess, așa cum se arată.