Python subprocess.run: একটি চাইল্ড কমান্ডকে নিজের প্রক্সি এনভায়রনমেন্ট দিন
একটি চাইল্ড কমান্ডের প্রক্সি দরকার হলে কপি করা এনভায়রনমেন্ট subprocess.run-এ দিন, Python-এর এনভায়রনমেন্ট অন্য কাজের জন্য না বদলে।
একটি Python প্রোগ্রাম একটি চাইল্ড কমান্ডকে নিজের প্রক্সি এনভায়রনমেন্ট দিতে পারে। উত্তরাধিকারসূত্রে পাওয়া মানগুলো কপি করুন, কপিটি বদলান, এবং সেটি subprocess.run-এ দিন:
import os
import subprocess
child_env = os.environ.copy()
child_env["https_proxy"] = "http://proxy.example:8080"
subprocess.run(
["curl", "--head", "https://www.example.com/"],
env=child_env,
check=True,
timeout=30,
)উদাহরণটি ধরে নেয় curl আগেই উপলব্ধ। এর HTTPS অনুরোধ প্রয়োজনীয় টানেল সমর্থনকারী একটি HTTP প্রক্সি ব্যবহার করতে পারে। প্রক্সি ক্রেডেনশিয়াল কনফিগার না করেই এই পাবলিক সাইট যাচাইয়ের জন্য HTTP প্রক্সি তালিকা থেকে একটি প্রার্থী উদাহরণের এন্ডপয়েন্ট প্রতিস্থাপন করতে পারে। চাইল্ডটি কপি করা এনভায়রনমেন্টের বাকি অংশও পায়, প্রযোজ্য বাইপাস সেটিংসসহ।
env পাঠানো এই আহ্বানকে সেই এনভায়রনমেন্ট দেয়। কপিটি Python প্রক্রিয়ার অন্য কাজের জন্য os.environ বদলানো এড়ায়।
সরাসরি os.environ-এ অ্যাসাইন করাও অর্থবহ: এটি Python-এর প্রক্রিয়া এনভায়রনমেন্ট হালনাগাদ করে এবং এর পরে শুরু হওয়া চাইল্ডকে প্রভাবিত করতে পারে। এটি Python চালু করা শেলকে হালনাগাদ করে না, অসংশ্লিষ্ট অ্যাপ্লিকেশন বা ইতিমধ্যে চলা চাইল্ডকেও নয়।
যদি উদ্দেশ্য আপনার ইন্টারঅ্যাকটিভ শেলে ভবিষ্যতের কমান্ড বদলানো হয়, তবে সেই পরিবর্তন শেলে করুন। যদি কেবল একটি চালু করা টুলের ভিন্ন রুট দরকার হয়, তবে দেখানো অনুযায়ী তার এনভায়রনমেন্ট subprocess আহ্বানের পাশে রাখুন।