os.system("unset http_proxy") કેમ કંઈ બદલતું નથી
પ્રોક્સી ચલને યોગ્ય Python પ્રક્રિયામાંથી દૂર કરો અથવા ચાઇલ્ડ કમાન્ડને નિયંત્રિત પર્યાવરણ આપો.
નીચેના કૉલ્સ બે અલગ શેલ પ્રક્રિયાઓ બનાવે છે:
os.system('unset http_proxy')
os.system('curl https://example.com/')
પ્રથમ શેલ પોતાના પર્યાવરણમાંથી ચલ દૂર કરે છે અને બહાર નીકળી જાય છે. Python પ્રક્રિયા પાસે હજી મૂળ મૂલ્ય છે. બીજું શેલ તેને ફરી વારસામાં મેળવે છે.
બાળકને તમે ઇચ્છતા હતા તે પર્યાવરણ આપો
જ્યારે ફક્ત એક જ કમાન્ડ વારસામાં મળેલ પ્રોક્સી ચલો વિના ચાલવું જોઈએ, ત્યારે 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ના પ્રક્રિયા પર્યાવરણનું વર્ણન કરે છે. આ વ્યાપો એ કારણ છે કે શેલ કમાન્ડ સફળતા જાહેર કરી શકે છે જ્યારે આગળની વિનંતી હજી જૂની પ્રોક્સી વાપરે છે.
અંતે, તમે ખરેખર ચલાવી રહ્યા છો તે ક્લાયન્ટ તપાસો. પર્યાવરણ ચલો એક રૂપરેખાંકન ઇનપુટ છે. સ્પષ્ટ પ્રોક્સી વિકલ્પ અથવા એપ્લિકેશનનું પોતાનું રૂપરેખાંકન તે ચલો ગયા પછી પણ પ્રોક્સી પસંદ કરવાનું ચાલુ રાખી શકે છે.