Apelurile următoare creează două procese shell separate:

os.system('unset http_proxy')
os.system('curl https://example.com/')

Primul shell elimină o variabilă din propriul mediu și se încheie. Procesul Python are încă valoarea originală. Al doilea shell o moștenește din nou.

Dă copilului mediul pe care l-ai intenționat

Când doar o comandă trebuie să ruleze fără variabile de proxy moștenite, copiază mediul Python și transmite copia copilului:

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)

Setarea explicită goală de proxy pentru curl anulează și selecția proxy din configurația proprie a curl. Copia mediului păstrează alte valori de care comanda poate avea nevoie. Transmiterea unui mediu gol în schimb poate elimina căile de căutare a executabilelor și configurația de aplicație nelegată.

Pentru operațiile ulterioare din procesul Python însuși, modifică os.environ în mod deliberat. Asta afectează ce moștenesc copiii nou creați; nu rescrie mediul terminalului părinte și nu reconfigurează neapărat clienții HTTP care și-au capturat deja setările.

subprocess API documentează argumentul env, iar os.environ descrie mediul de proces al Python. Aceste domenii sunt motivul pentru care o comandă shell poate raporta succes în timp ce următoarea cerere folosește încă proxy-ul vechi.

În final, verifică clientul pe care îl rulezi de fapt. Variabilele de mediu sunt o singură intrare de configurare. O opțiune explicită de proxy sau configurația proprie a unei aplicații poate continua să aleagă un proxy după ce acele variabile au dispărut.

Articole similare