תוכנית 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 כפי שמוצג.

מאמרים קשורים