താഴെയുള്ള വിളികൾ രണ്ട് വേറിട്ട shell പ്രോസസ്സുകൾ സൃഷ്ടിക്കുന്നു:

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

ആദ്യത്തെ shell സ്വന്തം പരിസ്ഥിതിയിൽ നിന്ന് ഒരു വേരിയബിൾ നീക്കം ചെയ്ത് അവസാനിക്കുന്നു. Python പ്രോസസ്സിൽ യഥാർത്ഥ മൂല്യം ഇപ്പോഴും ഉണ്ട്. രണ്ടാമത്തെ shell അത് വീണ്ടും പാരമ്പര്യമായി സ്വീകരിക്കുന്നു.

കുട്ടിക്ക് നിങ്ങൾ ഉദ്ദേശിച്ച പരിസ്ഥിതി നൽകുക

ഒരു കമാൻഡ് മാത്രം പാരമ്പര്യമായി ലഭിച്ച proxy വേരിയബിളുകളില്ലാതെ പ്രവർത്തിക്കണമെങ്കിൽ, 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-ന്റെ സ്വന്തം കോൺഫിഗറേഷനിൽ നിന്നുള്ള proxy തിരഞ്ഞെടുപ്പിനെയും അസാധുവാക്കുന്നു. പരിസ്ഥിതിയുടെ പകർപ്പ് കമാൻഡിന് ആവശ്യമായേക്കാവുന്ന മറ്റ് മൂല്യങ്ങൾ സംരക്ഷിക്കുന്നു. പകരം ശൂന്യമായ പരിസ്ഥിതി നൽകുന്നത് എക്സിക്യൂട്ടബിൾ തിരയൽ പാതകളും അപ്രസക്തമായ ആപ്ലിക്കേഷൻ കോൺഫിഗറേഷനും നീക്കം ചെയ്തേക്കാം.

Python പ്രോസസ്സിലെ തുടർന്നുള്ള പ്രവർത്തനങ്ങൾക്ക്, os.environ ബോധപൂർവ്വം മാറ്റുക. പുതുതായി സൃഷ്ടിക്കുന്ന കുട്ടികൾ എന്ത് പാരമ്പര്യമായി സ്വീകരിക്കും എന്നതിനെ അത് ബാധിക്കുന്നു; അത് മാതൃ ടെർമിനലിന്റെ പരിസ്ഥിതി തിരുത്തിയെഴുതുന്നില്ല, കൂടാതെ അവയുടെ ക്രമീകരണങ്ങൾ ഇതിനകം എടുത്ത HTTP ക്ലയന്റുകളെ ആവശ്യമായി പുനഃക്രമീകരിക്കുന്നുമില്ല.

subprocess API env ആർഗ്യുമെന്റ് രേഖപ്പെടുത്തുന്നു, os.environ Python-ന്റെ പ്രോസസ്സ് പരിസ്ഥിതി വിവരിക്കുന്നു. ഒരു shell കമാൻഡ് വിജയം റിപ്പോർട്ട് ചെയ്യുമ്പോഴും അടുത്ത അഭ്യർത്ഥന ഇപ്പോഴും പഴയ proxy ഉപയോഗിക്കുന്നതിന്റെ കാരണം ഈ വ്യാപ്തികളാണ്.

അവസാനം, നിങ്ങൾ യഥാർത്ഥത്തിൽ പ്രവർത്തിപ്പിക്കുന്ന ക്ലയന്റ് പരിശോധിക്കുക. പരിസ്ഥിതി വേരിയബിളുകൾ ഒരു കോൺഫിഗറേഷൻ ഇൻപുട്ട് മാത്രമാണ്. വ്യക്തമായ proxy ഓപ്ഷൻ അല്ലെങ്കിൽ ഒരു ആപ്ലിക്കേഷന്റെ സ്വന്തം കോൺഫിഗറേഷൻ, ആ വേരിയബിളുകൾ പോയതിനുശേഷവും proxy തിരഞ്ഞെടുക്കുന്നത് തുടരാം.

അനുബന്ധ ലേഖനങ്ങൾ