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.

Artikuj të ngjashëm