Python subprocess.run: gefðu einu barnferli sitt eigið proxy-umhverfi
Sendu afritað umhverfi til subprocess.run þegar ein barnskipun þarf proxy án þess að breyta umhverfi Python fyrir aðra vinnu.
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.