Python-forrit getur gefið einni barnskipun sitt eigið proxy-umhverfi. Afritaðu arfberu gildin, breyttu afritinu og sendu það til 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,
)

Dæmið gerir ráð fyrir að curl sé þegar tiltækt. HTTPS-beiðni þess getur notað HTTP-proxy sem styður nauðsynlega göngin. Fyrir þessa prófun á opinberri vefsíðu án stilltra proxy-skírteina getur frambjóðandi af HTTP-proxy listanum komið í stað endapunkts dæmisins. Barnið fær enn restina af afritaða umhverfinu, þar á meðal öll viðeigandi framhjáhlaupssettings.

Að senda env gefur þessari köllun það umhverfi. Afritið kemur í veg fyrir að os.environ breytist fyrir aðra vinnu í Python-ferlinu.

Að úthluta beint í os.environ hefur líka merkingu: það uppfærir ferlisumhverfi Python og getur haft áhrif á börn sem ræst eru síðar. Það uppfærir ekki skelina sem ræsti Python, ótengda forrit né barn sem er þegar í gangi.

Ef ætlunin er að breyta framtíðarskipunum í gagnvirku skelinni þinni, gerðu þá breytingu í skelinni. Ef aðeins eitt ræst tól þarf aðra leið skaltu hafa umhverfi þess við hlið subprocess-kallsins eins og sýnt er.

Tengdir greinar