Python subprocess.run: dar a um único processo filho o seu próprio ambiente de proxy
Passe um ambiente copiado para subprocess.run quando um comando filho precisa de um proxy sem alterar o ambiente do Python para outros trabalhos.
Um programa Python pode dar a um único comando filho o seu próprio ambiente de proxy. Copie os valores herdados, altere a cópia e passe-a para 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,
)O exemplo pressupõe que o curl já esteja disponível. O pedido HTTPS pode usar um proxy HTTP compatível com o túnel necessário. Para esta verificação de um site público sem credenciais de proxy configuradas, um candidato da lista de proxies HTTP pode substituir o endpoint do exemplo. O filho continua a receber o resto do ambiente copiado, incluindo quaisquer definições de exclusão aplicáveis.
Passar env dá a essa chamada aquele ambiente. A cópia evita alterar os.environ para outros trabalhos no processo Python.
Atribuir diretamente a os.environ também faz sentido: atualiza o ambiente do processo Python e pode afetar filhos iniciados depois. Não atualiza a shell que iniciou o Python, nem uma aplicação não relacionada, nem um filho que já está em execução.
Se a intenção é alterar comandos futuros na sua shell interativa, faça essa alteração na shell. Se apenas uma ferramenta iniciada precisa de um caminho diferente, mantenha o seu ambiente junto da chamada subprocess, como mostrado.