Firwat os.system("unset http_proxy") näischt ännert
Huelt eng Proxy-Variabel aus dem richtege Python-Prozess eraus oder gitt enger Kannerkommando eng kontrolléiert Ëmwelt.
Dës Opruff erstellen zwee getrennte Shell-Prozessen:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Déi éischt Shell hëlt eng Variabel aus hirer eegener Ëmwelt eraus an endt. De Python-Prozess huet nach ëmmer den urspréngleche Wäert. Déi zweet Shell ierft en nees.
Gitt dem Kand déi Ëmwelt, déi Dir geduecht hutt
Wann nëmmen eng Kommando ouni geierft Proxy-Variabelen ausgefouert soll ginn, kopéiert dem Python seng Ëmwelt a gitt d'Kopie un d'Kand:
import os
import subprocess
env = os.environ.copy()
for name in ('http_proxy', 'https_proxy', 'all_proxy',
'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY'):
env.pop(name, None)
subprocess.run(['curl', '--proxy', '', 'https://example.com/'],
env=env, check=True)
Déi explizit eidel curl-Proxy-Astellung iwwerschreift och d'Proxy-Auswiel aus dem curl senger eegener Konfiguratioun. D'Kopie vun der Ëmwelt behält aner Wäerter, déi d'Kommando brauche kann. Eng eidel Ëmwelt amplaz ze ginn, kann d'Sichweeër fir ausféierbar Dateien an onzougend Applikatiounskonfiguratioun ewechhuelen.
Fir spéider Operatiounen am Python-Prozess selwer, ännert os.environ bewosst. Dat beaflosst, wat nei erstallte Kanner ierwen; et schreift net d'Ëmwelt vum Elternteerminal ëm a rekonfiguréiert net onbedéngt HTTP-Clienten, déi hir Astellungen schonn erfaasst hunn.
D'subprocess API dokumentéiert dat env-Argument, an os.environ beschreift dem Python seng Prozessëmwelt. Dës Beräicher sinn de Grond, firwat eng Shell-Kommando Erfolleg melle kann, während déi nächst Ufro nach ëmmer de ale Proxy benotzt.
Schlussendlech kontrolléiert de Client, deen Dir tatsächlech ausféiert. Ëmweltvariabelen sinn ee Konfiguratiounsinput. Eng explicit Proxy-Optioun oder d'eegen Konfiguratioun vun enger Applikatioun kann e Proxy nach auswielen, nodeems dës Variabelen fort sinn.