ເປັນຫຍັງ os.system("unset http_proxy") ຈຶ່ງບໍ່ປ່ຽນຫຍັງ
ລຶບຕົວແປ proxy ອອກຈາກຂະບວນການ Python ທີ່ຖືກຕ້ອງ ຫຼື ສະໜອງສະພາບແວດລ້ອມທີ່ຄວບຄຸມໄດ້ໃຫ້ຄຳສັ່ງລູກ.
ການເອີ້ນຕໍ່ໄປນີ້ສ້າງສອງຂະບວນການ shell ແຍກກັນ:
os.system('unset http_proxy')
os.system('curl https://example.com/')
shell ທຳອິດລຶບຕົວແປອອກຈາກສະພາບແວດລ້ອມຂອງຕົນເອງແລ້ວອອກ. ຂະບວນການ Python ຍັງມີຄ່າເດີມຢູ່. shell ທີສອງສືບທອດມັນອີກ.
ໃຫ້ສະພາບແວດລ້ອມທີ່ເຈົ້າຕັ້ງໃຈໃຫ້ລູກ
ເມື່ອມີພຽງຄຳສັ່ງດຽວທີ່ຕ້ອງແລ່ນໂດຍບໍ່ມີຕົວແປ proxy ທີ່ສືບທອດມາ, ຄັດລອກສະພາບແວດລ້ອມຂອງ 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)
ການຕັ້ງ proxy ຫວ່າງເປົ່າຢ່າງຊັດເຈນຂອງ curl ຍັງຂຽວການເລືອກ proxy ຈາກການຕັ້ງຄ່າຂອງ curl ເອງ. ສຳເນົາສະພາບແວດລ້ອມຮັກສາຄ່າອື່ນໆທີ່ຄຳສັ່ງອາດຕ້ອງການ. ການສົ່ງສະພາບແວດລ້ອມຫວ່າງເປົ່າແທນ ອາດລຶບເສັ້ນທາງຄົ້ນຫາໄຟລ໌ທີ່ສາມາດແລ່ນໄດ້ ແລະ ການຕັ້ງຄ່າແອັບພລິເຄຊັນທີ່ບໍ່ກ່ຽວຂ້ອງ.
ສຳລັບການດຳເນີນງານຕໍ່ໄປໃນຂະບວນການ Python ເອງ, ຈົ່ງປ່ຽນ os.environ ຢ່າງຕັ້ງໃຈ. ສິ່ງນັ້ນມີຜົນຕໍ່ສິ່ງທີ່ລູກທີ່ສ້າງໃໝ່ຈະສືບທອດ; ມັນບໍ່ໄດ້ຂຽນ ສະພາບແວດລ້ອມຂອງເທີມິນພໍ່ແມ່ ຄືນ ແລະ ອາດບໍ່ຕັ້ງຄ່າ HTTP client ທີ່ເກັບການຕັ້ງຄ່າໄປແລ້ວຄືນໃໝ່.
subprocess API ອະທິບາຍອາກິວເມັນ env, ແລະ os.environ ອະທິບາຍສະພາບແວດລ້ອມຂະບວນການຂອງ Python. ຂອບເຂດເຫຼົ່ານີ້ແມ່ນເຫດຜົນທີ່ຄຳສັ່ງ shell ສາມາດລາຍງານຄວາມສຳເລັດ ໃນຂະນະທີ່ຄຳຮ້ອງຕໍ່ໄປຍັງໃຊ້ proxy ເກົ່າ.
ສຸດທ້າຍ, ກວດເບິ່ງ client ທີ່ເຈົ້າແລ່ນຢູ່ຕົວຈິງ. ຕົວແປສະພາບແວດລ້ອມເປັນພຽງອິນພຸດການຕັ້ງຄ່າຢ່າງໜຶ່ງ. ຕົວເລືອກ proxy ຢ່າງຊັດເຈນ ຫຼື ການຕັ້ງຄ່າຂອງແອັບພລິເຄຊັນເອງ ຍັງສາມາດເລືອກ proxy ຕໍ່ໄດ້ຫຼັງຈາກຕົວແປເຫຼົ່ານັ້ນໝົດໄປ.