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

Схожі статті