Mae'r galwadau canlynol yn creu dau broses plisgyn ar wahân:

os.system('unset http_proxy')
os.system('curl https://example.com/')

Mae'r plisgyn cyntaf yn tynnu newidyn o'i amgylchedd ei hun ac yn gorffen. Mae gan y broses Python y gwerth gwreiddiol o hyd. Mae'r ail blisgyn yn ei etifeddu eto.

Rhowch yr amgylchedd y gwnaethoch ei fwriadu i'r plentyn

Pan mai dim ond un gorchymyn ddylai redeg heb newidynnau dirprwy etifeddol, copïwch amgylchedd Python a rhowch y copi i'r plentyn:

import os
import subprocess

env = os.environ.copy()
for name in ('http_proxy', 'https_proxy', 'all_proxy',
             'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY'):
    env.pop(name, None)
subprocess.run(['curl', '--proxy', '', 'https://example.com/'],
               env=env, check=True)

Mae gosodiad dirprwy gwag penodol curl hefyd yn diystyru'r dewis dirprwy o ffurfweddiad curl ei hun. Mae copi'r amgylchedd yn cadw gwerthoedd eraill y gallai'r gorchymyn eu hangen. Mae trosglwyddo amgylchedd gwag yn lle hynny yn gallu tynnu llwybrau chwilio gweithredadwy a ffurfweddiad cymhwysiad digyswllt.

Ar gyfer gweithrediadau dilynol o fewn y broses Python ei hun, newidiwch os.environ yn fwriadol. Mae hyn yn effeithio ar yr hyn y mae plant newydd eu creu yn ei etifeddu; nid yw'n ailysgrifennu amgylchedd y derfynell rhiant nac o reidrwydd yn ailffurfweddu cleientiaid HTTP sydd eisoes wedi dal eu gosodiadau.

API subprocess yn dogfennu'r dadl env, ac mae os.environ yn disgrifio amgylchedd proses Python. Y cwmpasau hyn yw'r rheswm y gall gorchymyn plisgyn adrodd llwyddiant tra bod y cais nesaf yn dal i ddefnyddio'r hen ddirprwy.

Yn olaf, gwiriwch y cleient rydych chi'n ei redeg mewn gwirionedd. Mae newidynnau amgylchedd yn un mewnbwn ffurfweddu. Gall opsiwn dirprwy penodol neu ffurfweddiad cymhwysiad ei hun barhau i ddewis dirprwy ar ôl i'r newidynnau hynny ddiflannu.

Erthyglau cysylltiedig