Python subprocess.run: rhoi ei amgylchedd dirprwy ei hun i un plentyn
Trosglwyddwch amgylchedd copïedig i subprocess.run pan fo angen dirprwy ar un gorchymyn plentyn heb newid amgylchedd Python ar gyfer gwaith arall.
Gall rhaglen Python roi ei amgylchedd dirprwy ei hun i un gorchymyn plentyn. Copïwch y gwerthoedd a etifeddwyd, newidiwch y copi, a'i drosglwyddo i 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,
)Mae'r enghraifft yn tybio bod curl eisoes ar gael. Gall ei gais HTTPS ddefnyddio dirprwy HTTP sy'n cefnogi'r tiwnel gofynnol. Ar gyfer y gwiriad hwn o safle cyhoeddus heb unrhyw fanylion dirprwy wedi'u ffurfweddu, gall ymgeisydd o'r rhestr dirprwyon HTTP ddisodli pwynt terfyn yr enghraifft. Mae'r plentyn yn dal i dderbyn gweddill yr amgylchedd copïedig, gan gynnwys unrhyw osodiadau osgoi perthnasol.
Mae trosglwyddo env yn rhoi'r amgylchedd hwnnw i'r alwad hon. Mae'r copi yn osgoi newid os.environ ar gyfer gwaith arall yng nghylch Python.
Mae penodi'n uniongyrchol i os.environ yn ystyrlon hefyd: mae'n diweddaru amgylchedd cylch Python a gall effeithio ar blant a gychwynnir wedyn. Nid yw'n diweddaru'r plisgyn a lansiodd Python, cymhwysiad di-gysylltiad, na phlentyn sy'n rhedeg yn barod.
Os mai'r bwriad yw newid gorchmynion yn y dyfodol yn eich plisgyn rhyngweithiol, gwnewch y newid hwnnw yn y plisgyn. Os mai dim ond un offeryn a lansiwyd sydd angen llwybr gwahanol, cadwch ei amgylchedd wrth ymyl galwad subprocess fel y dangosir.