Zergatik os.system("unset http_proxy") ez duen ezer aldatzen
Kendu proxy aldagaia Python prozesu egokitik edo eman ingurune kontrolatua seme-komando bati.
Ondorengo deiek bi shell prozesu bereizi sortzen dituzte:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Lehen shellak bere ingurunetik aldagaia kentzen du eta irten egiten da. Python prozesuak jatorrizko balioa du oraindik. Bigarren shellak berriro heredatzen du.
Eman semeari pentsatu zenuen ingurunea
Komando bakarra proxy aldagai heredaturik gabe exekutatu behar denean, kopiatu Pythonen ingurunea eta pasa kopioa semeari:
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)
curl-en proxy ezarpen huts esplizituak curl-en konfigurazio propioaren proxy hautaketa ere gainidazten du. Ingurune kopiak komandoak behar ditzakeen beste balio batzuk gordetzen ditu. Horren ordez ingurune hutsa pasatzeak exekutagarrien bilaketa-bideak eta aplikazioaren konfigurazio independentea kendu ditzake.
Python prozesuan bertan ondorengo eragiketetarako, aldatu os.environ nahita. Horrek sortu berri diren semeek heredatzen dutena eragiten du; ez du guraso terminalaren ingurunea berridazten ezta beren ezarpenak jada hartu dituzten HTTP bezeroak nahitaez berkonfiguratzen.
Eremu horiek dira shell komando batek arrakasta jakinarazi dezakeen arrazoia hurrengo eskaerak proxy zaharra erabiltzen duen bitartean, eta subprocess APIak env argumentua dokumentatzen du; os.environ-ek, berriz, Pythonen prozesu-ingurunea deskribatzen du.
Azkenik, egia esan exekutatzen ari zaren bezeroa egiaztatu. Ingurune aldagaiak konfigurazio sarrera bat dira. Proxy aukera esplizitu batek edo aplikazio baten konfigurazio propioak proxy bat hautatzen jarrai dezake aldagai horiek desagertu ondoren.