ለምን 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 ትዕዛዝ ስኬት ሊያሳውቅ ሲችል ቀጣዩ ጥያቄ አሁንም የቀድሞውን ፕሮክሲ የሚጠቀምበት ምክንያት ናቸው።
በመጨረሻ፣ በትክክል የሚያሄዱትን ደንበኛ ይመልከቱ። የአካባቢ ተለዋዋጮች አንድ የውቅር ግብዓት ናቸው። ግልጽ የፕሮክሲ አማራጭ ወይም የመተግበሪያው የራሱ ውቅር እነዚያ ተለዋዋጮች ከጠፉ በኋላም ፕሮክሲ መምረጡን ሊቀጥል ይችላል።