ਹੇਠਾਂ ਦਿੱਤੀਆਂ ਕਾਲਾਂ ਦੋ ਵੱਖਰੇ 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 ਦੀ ਆਪਣੀ ਕਨਫਿਗਰੇਸ਼ਨ ਤੋਂ ਪ੍ਰੌਕਸੀ ਚੋਣ ਨੂੰ ਵੀ ਰੱਦ ਕਰਦੀ ਹੈ। ਵਾਤਾਵਰਣ ਦੀ ਕਾਪੀ ਉਹ ਹੋਰ ਮੁੱਲ ਬਚਾਉਂਦੀ ਹੈ ਜਿਨ੍ਹਾਂ ਦੀ ਕਮਾਂਡ ਨੂੰ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ। ਇਸ ਦੀ ਥਾਂ ਖਾਲੀ ਵਾਤਾਵਰਣ ਦੇਣ ਨਾਲ executable ਖੋਜ ਮਾਰਗ ਅਤੇ ਗੈਰ-ਸੰਬੰਧਿਤ ਐਪਲੀਕੇਸ਼ਨ ਕਨਫਿਗਰੇਸ਼ਨ ਹਟ ਸਕਦੇ ਹਨ।

Python ਪ੍ਰੋਸੈਸ ਵਿੱਚ ਅੱਗੇ ਦੇ ਕੰਮਾਂ ਲਈ, os.environ ਨੂੰ ਜਾਣ-ਬੁੱਝ ਕੇ ਬਦਲੋ। ਇਹ ਉਸ ਗੱਲ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ ਕਿ ਨਵੇਂ ਬਣੇ ਬੱਚੇ ਕੀ ਵਿਰਾਸਤ ਵਿੱਚ ਲੈਣਗੇ; ਇਹ ਪੇਰੈਂਟ ਟਰਮੀਨਲ ਦੇ ਵਾਤਾਵਰਣ ਨੂੰ ਦੁਬਾਰਾ ਨਹੀਂ ਲਿਖਦਾ ਅਤੇ ਨਾ ਹੀ ਉਨ੍ਹਾਂ HTTP ਕਲਾਇੰਟਾਂ ਨੂੰ ਜ਼ਰੂਰੀ ਤੌਰ 'ਤੇ ਮੁੜ-ਕਨਫਿਗਰ ਕਰਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਨੇ ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਪਹਿਲਾਂ ਹੀ ਲੈ ਲਈਆਂ ਹਨ।

subprocess API env ਆਰਗਿਊਮੈਂਟ ਦਾ ਦਸਤਾਵੇਜ਼ੀਕਰਨ ਕਰਦਾ ਹੈ, ਅਤੇ os.environ Python ਦੇ ਪ੍ਰੋਸੈਸ ਵਾਤਾਵਰਣ ਦਾ ਵਰਣਨ ਕਰਦਾ ਹੈ। ਇਹ ਵੱਖਰੇ ਘੇਰੇ ਹੀ ਕਾਰਨ ਹਨ ਕਿ shell ਕਮਾਂਡ ਸਫਲਤਾ ਦੀ ਰਿਪੋਰਟ ਕਰ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਅਗਲੀ ਬੇਨਤੀ ਅਜੇ ਵੀ ਪੁਰਾਣੀ ਪ੍ਰੌਕਸੀ ਵਰਤ ਰਹੀ ਹੁੰਦੀ ਹੈ।

ਅੰਤ ਵਿੱਚ, ਉਹ ਕਲਾਇੰਟ ਜਾਂਚੋ ਜੋ ਤੁਸੀਂ ਅਸਲ ਵਿੱਚ ਚਲਾ ਰਹੇ ਹੋ। ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ ਕਨਫਿਗਰੇਸ਼ਨ ਦਾ ਇੱਕ ਇਨਪੁਟ ਹਨ। ਸਪਸ਼ਟ ਪ੍ਰੌਕਸੀ ਵਿਕਲਪ ਜਾਂ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਆਪਣੀ ਕਨਫਿਗਰੇਸ਼ਨ ਉਹ ਵੇਰੀਏਬਲ ਜਾਣ ਤੋਂ ਬਾਅਦ ਵੀ ਪ੍ਰੌਕਸੀ ਚੁਣਦੀ ਰਹਿ ਸਕਦੀ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ