Järgmised kutsed loovad kaks eraldi shelli protsessi:

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

Esimene shell eemaldab muutuja oma keskkonnast ja lõpetab. Pythoni protsessil on endiselt algne väärtus. Teine shell pärib selle uuesti.

Andke lapsele keskkond, mida kavatsesite

Kui ainult üks käsk peaks töötama ilma päritud puhverserveri muutujateta, kopeerige Pythoni keskkond ja edastage koopia lapsele:

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)

Selgesõnaline tühi curli puhverserveri säte tühistab ka puhverserveri valiku curli enda konfiguratsioonist. Keskkonna koopia säilitab muud väärtused, mida käsk võib vajada. Tühja keskkonna edastamine võib seevastu eemaldada käivitatavate failide otsinguteed ja sõltumatu rakenduse konfiguratsiooni.

Pythoni protsessis endas hilisemate toimingute jaoks muutke os.environ teadlikult. See mõjutab, mida vastloodud lapsed pärib; see ei kirjuta üle vanemterminali keskkonda ega pruugi ümber konfigureerida HTTP-kliente, mis on oma sätted juba haaranud.

Nii subprocessi API dokumenteerib argumendi env ja os.environ kirjeldab Pythoni protsessikeskkonda. Need ulatused on põhjus, miks shelli käsk võib teatada õnnestumisest, samal ajal kui järgmine päring kasutab endiselt vana puhverserverit.

Lõpuks kontrollige klienti, mida te tegelikult käivitate. Keskkonnamuutujad on üks konfiguratsiooni sisend. Selgesõnaline puhverserveri valik või rakenduse enda konfiguratsioon võib pärast nende muutujate kadumist endiselt puhverserveri valida.

Seotud artiklid