درج ذیل کالیں دو الگ شیل عمل بناتی ہیں:

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 کے عمل کے ماحول کی وضاحت کرتا ہے۔ یہی دائرے وجہ ہیں کہ شیل کمانڈ کامیابی کی اطلاع دے سکتی ہے جبکہ اگلی درخواست اب بھی پرانی پروکسی استعمال کر رہی ہو۔

آخر میں، اس کلائنٹ کو دیکھیں جو آپ واقعی چلا رہے ہیں۔ ماحول کے متغیرات کنفیگریشن کا صرف ایک ذریعہ ہیں۔ واضح پروکسی آپشن یا ایپلیکیشن کی اپنی کنفیگریشن ان متغیرات کے جانے کے بعد بھی پروکسی منتخب کرتی رہ سکتی ہے۔

متعلقہ مضامین