Python-ohjelma voi antaa yhdelle lapsikomennolle oman välityspalvelinympäristön. Kopioi perityt arvot, muuta kopiota ja välitä se subprocess.run-funktiolle:

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,
)

Esimerkki olettaa, että curl on jo käytettävissä. Sen HTTPS-pyyntö voi käyttää HTTP-välityspalvelinta, joka tukee tarvittavaa tunnelia. Tätä julkisen sivuston tarkistusta varten ilman määritettyjä välityspalvelimen tunnuksia HTTP-välityspalvelinluettelosta löytyvä ehdokas voi korvata esimerkin päätepisteen. Lapsiprosessille välittyy yhä muu kopioitu ympäristö, mukaan lukien kaikki soveltuvat ohitusasetukset.

env:n välittäminen antaa tälle kutsulle kyseisen ympäristön. Kopio estää os.environ-muuttujan muuttamisen muuta Python-prosessin työtä varten.

Suora osoittaminen os.environ-muuttujaan on myös merkityksellistä: se päivittää Python-prosessin ympäristön ja voi vaikuttaa myöhemmin käynnistettäviin lapsiprosesseihin. Se ei päivitä kuorta, joka käynnisti Pythonin, ei erillistä sovellusta eikä jo käynnissä olevaa lapsiprosessia.

Jos tarkoitus on muuttaa tulevia komentoja interaktiivisessa kuoressasi, tee muutos kuoressa. Jos vain yksi käynnistetty työkalu tarvitsee eri reitin, pidä sen ympäristö subprocess-kutsun vieressä kuten näytetty.

Aiheeseen liittyvät artikkelit