Python subprocess.run: suteikti vienam antriniam procesui jo paties tarpinio serverio aplinką
Perduokite nukopijuotą aplinką subprocess.run, kai vienai antrinei komandai reikia tarpinio serverio nekeičiant Python aplinkos kitam darbui.
Python programa gali suteikti vienai antrinei komandai jos pačios tarpinio serverio aplinką. Nukopijuokite paveldėtas reikšmes, pakeiskite kopiją ir perduokite ją 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,
)Pavyzdys daro prielaidą, kad curl jau prieinamas. Jo HTTPS užklausa gali naudoti HTTP tarpinį serverį, palaikantį reikiamą tunelį. Šiam viešos svetainės patikrinimui be sukonfigūruotų tarpinio serverio prisijungimo duomenų kandidatas iš HTTP tarpinių serverių sąrašo gali pakeisti pavyzdžio galinį tašką. Antrinis procesas vis tiek gauna likusią nukopijuotą aplinką, įskaitant visus taikytinus apėjimo nustatymus.
Perdavus env, šis iškvietimas gauna tą aplinką. Kopija apsaugo nuo os.environ pakeitimo kitam darbui Python procese.
Tiesioginis priskyrimas os.environ taip pat prasmingas: jis atnaujina Python proceso aplinką ir gali paveikti vėliau paleidžiamus antrinius procesus. Jis neatnaujina shell, kuris paleido Python, nesusijusios programos ar jau veikiančio antrinio proceso.
Jei ketinimas yra pakeisti būsimas komandas interaktyviame shell, atlikite tą pakeitimą shell. Jei tik vienam paleistam įrankiui reikia kito maršruto, laikykite jo aplinką šalia subprocess iškvietimo, kaip parodyta.