Et Python-program kan give én barneproces sit eget proxy-miljø. Kopiér de nedarvede værdier, ændr kopien, og send den til 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,
)

Eksemplet forudsætter, at curl allerede er tilgængelig. Dets HTTPS-anmodning kan bruge en HTTP-proxy, der understøtter den nødvendige tunnel. Til denne kontrol af et offentligt websted uden konfigurerede proxy-legitimationsoplysninger kan en kandidat fra HTTP-proxy-listen erstatte eksemplets endepunkt. Barneprocessen modtager stadig resten af det kopierede miljø, inklusive eventuelle relevante omgåelsesindstillinger.

Ved at sende env får dette kald det miljø. Kopien forhindrer, at os.environ ændres for andet arbejde i Python-processen.

Tildeling direkte til os.environ er også meningsfuld: den opdaterer Python-processens miljø og kan påvirke barneprocesser, der startes bagefter. Den opdaterer ikke den shell, der startede Python, en urelateret applikation eller en barneproces, der allerede kører.

Hvis hensigten er at ændre fremtidige kommandoer i din interaktive shell, skal du foretage den ændring i shellen. Hvis kun ét startet værktøj har brug for en anden rute, skal du holde dets miljø ved siden af subprocess-kaldet som vist.

Relaterede artikler