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 ఆదేశం విజయాన్ని నివేదించినప్పటికీ తదుపరి అభ్యర్థన ఇంకా పాత ప్రాక్సీని ఉపయోగించడానికి కారణం.
చివరగా, మీరు నిజంగా నడుపుతున్న క్లయింట్ను తనిఖీ చేయండి. వాతావరణ వేరియబుల్స్ ఒక కాన్ఫిగరేషన్ ఇన్పుట్ మాత్రమే. ఆ వేరియబుల్స్ పోయిన తర్వాత కూడా స్పష్టమైన ప్రాక్సీ ఎంపిక లేదా అప్లికేషన్ యొక్క స్వంత కాన్ఫిగరేషన్ ప్రాక్సీని ఎంచుకోవడం కొనసాగించవచ్చు.