Една 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, както е показано.

Подобни статии