खालील कॉल दोन वेगळ्या 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 कमांड यश नोंदवू शकते पण पुढील विनंती जुना प्रॉक्सी वापरत राहते — याचे कारण हेच वेगळे परिघ आहेत.

शेवटी, तुम्ही प्रत्यक्षात चालवत असलेला क्लायंट तपासा. वातावरण व्हेरिएबल्स हे कॉन्फिगरेशनचे एकच इनपुट आहे. स्पष्ट प्रॉक्सी पर्याय किंवा अ‍ॅप्लिकेशनचे स्वतःचे कॉन्फिगरेशन ती व्हेरिएबल्स गेल्यानंतरही प्रॉक्सी निवडत राहू शकते.

संबंधित लेख