os.system("unset http_proxy") ಏಕೆ ಏನನ್ನೂ ಬದಲಿಸುವುದಿಲ್ಲ
ಪ್ರಾಕ್ಸಿ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಸರಿಯಾದ Python ಪ್ರಕ್ರಿಯೆಯಿಂದ ತೆಗೆದುಹಾಕಿ ಅಥವಾ ಚೈಲ್ಡ್ ಆಜ್ಞೆಗೆ ನಿಯಂತ್ರಿತ ಪರಿಸರವನ್ನು ಒದಗಿಸಿ.
ಕೆಳಗಿನ ಕರೆಗಳು ಎರಡು ಪ್ರತ್ಯೇಕ ಶೆಲ್ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ರಚಿಸುತ್ತವೆ:
os.system('unset http_proxy')
os.system('curl https://example.com/')
ಮೊದಲ ಶೆಲ್ ತನ್ನದೇ ಪರಿಸರದಿಂದ ವೇರಿಯೇಬಲ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ ನಿರ್ಗಮಿಸುತ್ತದೆ. Python ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಇನ್ನೂ ಮೂಲ ಮೌಲ್ಯವಿದೆ. ಎರಡನೇ ಶೆಲ್ ಅದನ್ನು ಮತ್ತೆ ಆನುವಂಶಿಕವಾಗಿ ಪಡೆಯುತ್ತದೆ.
ನೀವು ಉದ್ದೇಶಿಸಿದ ಪರಿಸರವನ್ನು ಮಗುವಿಗೆ ನೀಡಿ
ಆನುವಂಶಿಕವಾಗಿ ಬಂದ ಪ್ರಾಕ್ಸಿ ವೇರಿಯೇಬಲ್ಗಳಿಲ್ಲದೆ ಒಂದೇ ಆಜ್ಞೆ ಚಲಿಸಬೇಕಾದಾಗ, 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 ನ ಪ್ರಕ್ರಿಯೆ ಪರಿಸರವನ್ನು ವಿವರಿಸುತ್ತದೆ. ಈ ವ್ಯಾಪ್ತಿಗಳೇ ಶೆಲ್ ಆಜ್ಞೆ ಯಶಸ್ಸನ್ನು ವರದಿ ಮಾಡಬಹುದು ಆದರೆ ಮುಂದಿನ ವಿನಂತಿ ಇನ್ನೂ ಹಳೆಯ ಪ್ರಾಕ್ಸಿಯನ್ನು ಬಳಸುವ ಕಾರಣ.
ಕೊನೆಯದಾಗಿ, ನೀವು ನಿಜವಾಗಿ ಚಲಾಯಿಸುತ್ತಿರುವ ಕ್ಲೈಂಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ. ಪರಿಸರ ವೇರಿಯೇಬಲ್ಗಳು ಒಂದು ಸಂರಚನಾ ಇನ್ಪುಟ್. ಸ್ಪಷ್ಟ ಪ್ರಾಕ್ಸಿ ಆಯ್ಕೆ ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ನ ಸ್ವಂತ ಸಂರಚನೆಯು ಆ ವೇರಿಯೇಬಲ್ಗಳು ಹೋದ ನಂತರವೂ ಪ್ರಾಕ್ಸಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಬಹುದು.