La jenaj alvokoj kreas du apartajn ŝelprocezojn:

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

La unua ŝelo forigas variablon el sia propra medio kaj finiĝas. La Python-procezo ankoraŭ havas la originalan valoron. La dua ŝelo denove heredas ĝin.

Donu al la infano la medion, kiun vi intencis

Kiam nur unu komando devas ruliĝi sen hereditaj proksilaj variabloj, kopiu la medion de Python kaj transdonu la kopion al la infano:

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)

La eksplicita malplena proksila agordo de curl ankaŭ superregas proksilan elekton el la propra agordo de curl. La media kopio konservas aliajn valorojn, kiujn la komando eble bezonas. Transdoni malplenan medion anstataŭe povas forigi serĉajn vojojn de plenumeblaj dosieroj kaj sendependan aplikaĵan agordon.

Por postaj operacioj en la Python-procezo mem, ŝanĝu os.environ konscie. Tio influas, kion heredas nove kreitaj infanoj; ĝi ne reskribas la medion de la gepatra terminalo nek nepre reagordas HTTP-klientojn, kiuj jam kaptis siajn agordojn.

La subprocess-API dokumentas la argumenton env, kaj os.environ priskribas la procesan medion de Python. Tiuj kampoj estas la kialo, ke ŝelkomando povas raporti sukceson dum la sekva peto ankoraŭ uzas la malnovan proksilon.

Fine, kontrolu la klienton, kiun vi efektive rulas. Mediaj variabloj estas unu agorda enigo. Eksplicita proksila opcio aŭ la propra agordo de aplikaĵo povas daŭre elekti proksilon post kiam tiuj variabloj malaperis.

Rilataj artikoloj