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 این محیط را به این فراخوانی میدهد. کپی مانع تغییر os.environ برای کارهای دیگر در فرایند Python میشود.
اختصاص مستقیم به os.environ هم معنادار است: محیط فرایند Python را بهروز میکند و میتواند بر فرزندانی که بعداً شروع میشوند تأثیر بگذارد. پوستهای را که Python را اجرا کرد بهروز نمیکند، نه یک برنامه بیربط و نه فرزندی که از قبل در حال اجرا است.
اگر قصد تغییر فرمانهای آینده در پوسته تعاملی خود را دارید، آن تغییر را در پوسته انجام دهید. اگر فقط یک ابزار اجراشده مسیر متفاوتی میخواهد، محیطش را مطابق نمایش کنار فراخوانی subprocess نگه دارید.