โปรแกรม 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 ตามที่แสดง

บทความที่เกี่ยวข้อง