Kwa nini os.system("unset http_proxy") haibadilishi chochote
Ondoa kigezo cha proksi kwenye mchakato sahihi wa Python au ipe amri mtoto mazingira yaliyodhibitiwa.
Miito ifuatayo huunda michakato miwili tofauti ya shell:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Shell ya kwanza huondoa kigezo kutoka mazingira yake na kuisha. Mchakato wa Python bado una thamani ya awali. Shell ya pili hurithi tena.
Mpe mtoto mazingira uliyokusudia
Wakati amri moja tu inapaswa kuendeshwa bila vigezo vya proksi vilivyorithiwa, nakili mazingira ya Python na upitishe nakala kwa mtoto:
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)
Mpangilio wazi wa proksi tupu wa curl pia hupuuza uchaguzi wa proksi kutoka usanidi wa curl wenyewe. Nakala ya mazingira huhifadhi thamani nyingine ambazo amri inaweza kuhitaji. Kupitisha mazingira tupu badala yake kunaweza kuondoa njia za utafutaji wa programu na usanidi wa programu usiohusiana.
Kwa shughuli zinazofuata katika mchakato wa Python wenyewe, badilisha os.environ kwa makusudi. Hiyo huathiri kile watoto wapya hurithi; haiiandiki upya mazingira ya terminal mzazi na haisanidi upya kwa lazima wateja wa HTTP ambao tayari wameshanasa mipangilio yao.
API ya subprocess huandika hoja env, na os.environ hufafanua mazingira ya mchakato wa Python. Huu ndio upeo unaosababisha amri ya shell iripoti mafanikio wakati ombi linalofuata bado linatumia proksi ya zamani.
Hatimaye, angalia mteja unaoendesha kwa kweli. Vigezo vya mazingira ni sehemu moja ya usanidi. chaguo wazi la proksi au usanidi wa programu yenyewe unaweza kuendelea kuchagua proksi baada ya vigezo hivyo kuondoka.