Pse os.system("unset http_proxy") nuk ndryshon asgjë
Hiqni variablin e proxy-t nga procesi i duhur i Python ose jepini komandës fëmijë një mjedis të kontrolluar.
Thirrjet e mëposhtme krijojnë dy procese të veçanta shell:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Shell-i i parë heq një variabël nga mjedisi i vet dhe del. Procesi Python vazhdon të ketë vlerën origjinale. Shell-i i dytë e trashëgon përsëri.
Jepini fëmijës mjedisin që kishit ndërmend
Kur vetëm një komandë duhet të ekzekutohet pa variablat e trashëguara të proxy-t, kopjoni mjedisin e Python dhe ia kaloni kopjen fëmijës:
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)
Cilësimi i qartë bosh i proxy-t në curl anulon gjithashtu zgjedhjen e proxy-t nga konfigurimi i vetë curl. Kopja e mjedisit ruan vlera të tjera që komanda mund t'i ketë të nevojshme. Kalimi i një mjedisi bosh në vend të kësaj mund të heqë shtigjet e kërkimit të ekzekutueshëm dhe konfigurimin e palidhur të aplikacionit.
Për veprimet e mëtejshme në vetë procesin Python, ndryshoni os.environ me qëllim. Kjo ndikon në atë që trashëgojnë fëmijët e sapokrijuar; nuk rishkruan mjedisin e terminalit mëmë dhe nuk rikonfiguron domosdoshmërisht klientët HTTP që kanë kapur tashmë cilësimet e tyre.
API-ja subprocess dokumenton argumentin env, dhe os.environ përshkruan mjedisin e procesit të Python. Pikërisht këto fusha janë arsyeja pse një komandë shell mund të raportojë sukses ndërsa kërkesa tjetër vazhdon të përdorë proxy-n e vjetër.
Së fundi, kontrolloni klientin që po ekzekutoni në të vërtetë. Variablat e mjedisit janë vetëm një hyrje konfigurimi. një opsion i qartë proxy ose konfigurimi i vetë aplikacionit mund të vazhdojë të zgjedhë një proxy pasi ato variabla të jenë zhdukur.