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, як показано.