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