os.system("unset http_proxy") က ဘာမှ မပြောင်းလဲရတဲ့ အကြောင်း
proxy variable ကို မှန်ကန်တဲ့ Python process ကနေ ဖယ်ရှားပါ သို့မဟုတ် ကလပ် command ကို ထိန်းချုပ်ထားတဲ့ ပတ်ဝန်းကျင် ပေးပါ။
အောက်ပါ ခေါ်ဆိုမှုများက သီးခြား shell process နှစ်ခု ဖန်တီးသည်:
os.system('unset http_proxy')
os.system('curl https://example.com/')
ပထမ shell က ကိုယ်ပိုင်ပတ်ဝန်းကျင်မှ variable တစ်ခုကို ဖယ်ရှားပြီး ထွက်သွားသည်။ Python process တွင် မူရင်းတန်ဖိုး ရှိနေဆဲဖြစ်သည်။ ဒုတိယ shell က ၎င်းကို ထပ်မံအမွေခံသည်။
ကလပ်ကို သင်ရည်ရွယ်ထားတဲ့ ပတ်ဝန်းကျင် ပေးပါ
command တစ်ခုတည်းကို အမွေခံ proxy variable များမပါဘဲ လုပ်ဆောင်ရန် လိုအပ်ပါက 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 ၏ ရှင်းလင်းသော အလွတ် proxy သတ်မှတ်ချက်က curl ၏ ကိုယ်ပိုင် configuration မှ proxy ရွေးချယ်မှုကိုလည်း ကျော်လွှားသည်။ ပတ်ဝန်းကျင်မိတ္တူက command လိုအပ်နိုင်သည့် အခြားတန်ဖိုးများကို ထိန်းသိမ်းသည်။ အစား အလွတ်ပတ်ဝန်းကျင် ပေးပို့ခြင်းက executable ရှာဖွေရေးလမ်းကြောင်းများနှင့် မသက်ဆိုင်သော application configuration ကို ဖယ်ရှားနိုင်သည်။
Python process အတွင်းရှိ နောက်ဆက်တွဲ လုပ်ဆောင်ချက်များအတွက် os.environ ကို တမင်ပြောင်းပါ။ ၎င်းက အသစ်ဖန်တီးထားသော ကလပ်များ ဘာကို အမွေခံမည်ကို သက်ရောက်သည်; ၎င်းက မိခင်တာမီနယ်၏ ပတ်ဝန်းကျင် ကို ပြန်လည်မရေးပါ၊ ၎င်းတို့၏ သတ်မှတ်ချက်များကို ရယူပြီးသား HTTP client များကို မဖြစ်မနေ ပြန်လည် configure လုပ်သည်လည်း မဟုတ်ပါ။
subprocess API က env argument ကို မှတ်တမ်းတင်ထားပြီး os.environ က Python ၏ process ပတ်ဝန်းကျင်ကို ဖော်ပြသည်။ ဤ scope ကွာခြားချက်များက shell command တစ်ခု အောင်မြင်မှု အစီရင်ခံနိုင်သော်လည်း နောက်တောင်းဆိုမှုက proxy အဟောင်းကို ဆက်အသုံးပြုနေရသည့် အကြောင်းရင်း ဖြစ်သည်။
နောက်ဆုံးအနေဖြင့် သင်အမှန်တကယ် run နေသော client ကို စစ်ဆေးပါ။ ပတ်ဝန်းကျင် variable များသည် configuration input တစ်ခုသာ ဖြစ်သည်။ ရှင်းလင်းသော proxy option သို့မဟုတ် application ၏ ကိုယ်ပိုင် configuration က ထို variable များ ကုန်ဆုံးပြီးနောက်တွင်လည်း proxy ကို ဆက်ရွေးချယ်နိုင်သည်။