பின்வரும் அழைப்புகள் இரண்டு தனித்தனி 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 கிளையண்டுகளை மறுகட்டமைக்கவும் வேண்டியதில்லை.

subprocess API என்பது env வாதத்தை ஆவணப்படுத்துகிறது, os.environ என்பது Python இன் செயல்முறை சூழலை விவரிக்கிறது. இந்த எல்லைகளே ஒரு shell கட்டளை வெற்றியைத் தெரிவிக்கும்போது அடுத்த கோரிக்கை இன்னும் பழைய ப்ராக்ஸியைப் பயன்படுத்துவதற்குக் காரணம்.

இறுதியாக, நீங்கள் உண்மையில் இயக்கும் கிளையண்டைச் சரிபார்க்கவும். சூழல் மாறிகள் ஒரு உள்ளமைவு உள்ளீடு மட்டுமே. அந்த மாறிகள் போன பிறகும் வெளிப்படையான ப்ராக்ஸி விருப்பம் அல்லது பயன்பாட்டின் சொந்த உள்ளமைவு ப்ராக்ஸியைத் தேர்ந்தெடுத்துக்கொண்டே இருக்கலாம்.

தொடர்புடைய கட்டுரைகள்