Неге os.system("unset http_proxy") ештеңені өзгертпейді
Прокси айнымалысын дұрыс Python процессінен жойыңыз немесе еншілес пәрменге басқарылатын орта беріңіз.
Келесі шақырулар екі бөлек shell процессін жасайды:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Бірінші shell айнымалыны өз ортасынан жояды да шығады. Python процессінде әлі де бастапқы мән бар. Екінші shell оны қайтадан мұралайды.
Балаға өзіңіз көздеген ортаны беріңіз
Тек бір пәрмен мұраланған прокси айнымалыларынсыз орындалуы керек болса, Python ортасын көшіріп, көшірмені балаға беріңіз:
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)
curl-дың айқын бос прокси параметрі curl-дың өз конфигурациясындағы прокси таңдауын да қайта жазады. Ортаның көшірмесі пәрменге қажет болуы мүмкін басқа мәндерді сақтайды. Орнына бос орта беру орындалатын файлдарды іздеу жолдарын және байланысы жоқ қолданба конфигурациясын жоюы мүмкін.
Python процессінің өзіндегі кейінгі әрекеттер үшін os.environ-ны әдейі өзгертіңіз. Бұл жаңадан жасалған балалардың нені мұралайтынына әсер етеді; ол ата-ана терминалының ортасын қайта жазбайды және өз параметрлерін әлдеқашан қабылдаған HTTP клиенттерін міндетті түрде қайта конфигурацияламайды.
subprocess API env аргументін құжаттайды, ал os.environ Python-ның процесс ортасын сипаттайды. Осы аумақтар shell пәрменінің сәттілік туралы хабарлай алуының, ал келесі сұраныстың әлі де ескі проксиді пайдалануының себебі.
Соңында, шын мәнінде іске қосып жатқан клиентті тексеріңіз. Орта айнымалылары — конфигурацияның бір кірісі. Айқын прокси опциясы немесе қолданбаның өз конфигурациясы бұл айнымалылар жоғалғаннан кейін де прокси таңдауды жалғастыра алады.