De folgjende oproppen meitsje twa aparte shellprosessen:

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

De earste shell ferwidert in fariabele út syn eigen omjouwing en einiget. It Python-proses hat noch de oarspronklike wearde. De twadde shell erft dy wer.

Jou it bern de omjouwing dy't jo bedoelden

As mar ien opdracht sûnder erfd proxyfariabelen rinne moat, kopiearje dan de omjouwing fan Python en jou de kopy oan it bern:

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)

De eksplisite lege curl-proxyynstelling oerskriuwt ek de proxykar út curl syn eigen konfiguraasje. De omjouwingskopy behâldt oare wearden dy't de opdracht nedich wêze kin. In lege omjouwing trochjaan kin ynstee sykpaden foar útfierbere bestannen en net-relatearre applikaasjekonfiguraasje fuortsmite.

Foar folgjende bewurkingen yn it Python-proses sels feroarje os.environ bewust. Dat beynfloedet wat nij makke bern ervje; it oerskriuwt de omjouwing fan 'e âlderlike terminal net en konfigurearret net needsaaklik HTTP-klanten opnij dy't har ynstellingen al fêstlein hawwe.

De subprocess-API dokumintearret it argumint env, en os.environ beskriuwt de prosesomjouwing fan Python. Dizze berikken binne de reden dat in shellopdracht súkses melde kin wylst it folgjende fersyk noch de âlde proxy brûkt.

Kontrolearje op it lêst de klant dy't jo feitlik rinne litte. Omjouwingsfariabelen binne ien konfiguraasje-ynfier. In eksplisite proxyopsje of de eigen konfiguraasje fan in applikaasje kin noch in proxy kieze nei't dy fariabelen fuort binne.

Relatearre artikelen