Яагаад os.system("unset http_proxy") юу ч өөрчлөхгүй вэ
Прокси хувьсагчийг зөв Python процессоос устгах эсвэл хүү команд тусдаа хяналттай орчин өгөх.
Дараах дуудлагууд нь хоёр тусдаа shell процесс үүсгэдэг:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Эхний shell өөрийн орчноос хувьсагчийг устгаад дуусдаг. Python процесст анхны утга хэвээр байна. Хоёр дахь shell түүнийг дахин өвлөнө.
Хүүдээ өөрийн бодсон орчныг өг
Зөвхөн нэг команд өвлөгдсөн прокси хувьсагчгүй ажиллах ёстой бол Python-ийн орчныг хуулж, хуулбарыг хүүдээ өг:
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)
curl-ийн тодорхой хоосон прокси тохиргоо нь curl-ийн өөрийн тохиргооноос прокси сонголтыг мөн дарж бичнэ. Орчны хуулбар нь команд хэрэглэж болох бусад утгыг хадгална. Харин хоосон орчин өгөх нь гүйцэтгэх файл хайх замыг болон холбоогүй програмын тохиргоог устгаж болно.
Python процесс доторх цаашдын үйлдлүүдэд os.environ-ийг санаатайгаар өөрчил. Энэ нь шинээр үүсгэсэн хүүхдүүд юу өвлөхийг тодорхойлно; энэ нь эх терминалын орчныг дахин бичихгүй бөгөөд тохиргоогоо аль хэдийн авсан HTTP client-уудыг заавал дахин тохируулахгүй.
subprocess API нь env аргументыг тайлбарладаг бөгөөд os.environ нь Python-ийн процессын орчныг дүрсэлдэг. Эдгээр хүрээний ялгаа нь shell команд амжилт мэдээлж байхад дараагийн хүсэлт хуучин прокси ашигласар байх шалтгаан юм.
Эцэст нь, таны үнэхээр ажиллуулж буй client-ээ шалга. Орчны хувьсагчид бол тохиргооны зөвхөн нэг оролт. Тодорхой прокси сонголт эсвэл програмын өөрийн тохиргоо нь эдгээр хувьсагч алга болсны дараа ч прокси сонгосоор байж болно.