Hvers vegna os.system("unset http_proxy") breytir engu
Fjarlægðu proxybreytu úr réttu Python-ferlinu eða veittu undirskipun stýrt umhverfi.
Eftirfarandi köll búa til tvö aðskilin skelferli:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Fyrsta skelin fjarlægir breytu úr eigin umhverfi og hættir. Python-ferlið hefur enn upprunalega gildið. Önnur skelin erfir það aftur.
Gefðu barninu umhverfið sem þú ætlaðir
Þegar aðeins ein skipun á að keyra án arfgreindra proxybreyta, afritaðu umhverfi Python og sendu afritið til barnsins:
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)
Skýr tóm curl-proxy stilling hnekkir einnig proxyvali úr eigin stillingum curls. Afrit umhverfisins varðveitir önnur gildi sem skipunin gæti þurft. Að senda tómt umhverfi í staðinn getur fjarlægt leitarslóðir fyrir keyranlegar skrár og ótengda stillingu forrits.
Fyrir síðari aðgerðir í Python-ferlinu sjálfu skaltu breyta os.environ viljandi. Það hefur áhrif á hvað nýstofnuð börn erfa; það endurskrifar ekki umhverfi foreldraskjáborðsins og endurstillir ekki endilega HTTP-biðla sem hafa þegar tekið stillingar sínar.
subprocess-API skjalfestir env viðfangið og os.environ lýsir ferlisumhverfi Python. Þessi svið eru ástæðan fyrir því að skelskipun getur tilkynnt árangur meðan næsta beiðni notar enn gamla proxyið.
Athugaðu að lokum biðlaranum sem þú keyrir í raun. Umhverfisbreytur eru ein stillingarinntak. Skýr proxyvalkostur eða eigin stilling forrits getur haldið áfram að velja proxy eftir að þessar breytur eru horfnar.