Python-programo povas doni al unu infana komando sian propran prokuran medion. Kopiu la heredajn valorojn, ŝanĝu la kopion kaj transdonu ĝin al 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,
)

La ekzemplo supozas, ke curl jam haveblas. Ĝia HTTPS-peto povas uzi HTTP-prokurilon, kiu subtenas la bezonatan tunelon. Por ĉi tiu kontrolo de publika retejo sen agorditaj prokuraj akreditaĵoj, kandidato el la listo de HTTP-prokuriloj povas anstataŭigi la finpunkton de la ekzemplo. La infana procezo ankoraŭ ricevas la ceteron de la kopiita medio, inkluzive de ĉiuj aplikeblaj preterpasadaj agordoj.

Transdoni env donas al ĉi tiu voko tiun medion. La kopio evitas ŝanĝi os.environ por alia laboro en la Python-procezo.

Ankaŭ rekta atribuo al os.environ havas sencon: ĝi ĝisdatigas la procezan medion de Python kaj povas influi infanajn procezojn lanĉitajn poste. Ĝi ne ĝisdatigas la ŝelon, kiu lanĉis Python, nek sendependan aplikaĵon, nek infanan procezon jam kurantan.

Se la intenco estas ŝanĝi estontajn komandojn en via interaga ŝelo, faru tiun ŝanĝon en la ŝelo. Se nur unu lanĉita ilo bezonas alian itineron, tenu ĝian medion apud la subprocess-voko kiel montrite.

Rilataj artikoloj