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