Python에서 "http_proxy" 환경 변수를 설정 해제하는 방법

Python에서 "http_proxy" 환경 변수를 설정 해제하는 방법

다음 Python 코드를 사용하여 Linux CentOS 6에서 환경 변수를 재설정 http_proxy하지만 나머지 Python 스크립트에서는 변수를 설정 해제하지 않습니다.

암호:

 import os 
 print "Unsetting http..." 
 os.system("unset http_proxy") 
 os.system("echo $http_proxy") 
 print "http is reset"

산출:

Unsetting http...
http://web-proxy.xxxx.xxxxxxx.net:8080
http is reset
Process finished with exit code 0

답변1

각 호출은 os.system()고유한 새로운 환경을 갖춘 자체 하위 셸에서 실행됩니다.

>>> import os
>>> os.system("echo $$")
97678
0
>>> os.system("echo $$")
97679
0

변수 는 unset http_proxy이지만 서브쉘은 명령 실행을 완료하고(예: ) unset종료됩니다. 그런 다음 실행하려는 새 환경으로 새 하위 쉘을 시작할 수 있습니다 echo.

나는 당신이하고 싶은 것이 del os.environ['http_proxy'], 또는 이전에 존재했는지 여부에 관계없이 환경 변수가 os.environ.pop('http_proxy')없는지 확인하려는 경우 다음과 같이 생각합니다.http_proxy

$ export foo=bar
$ python2
Python 2.7.10 (default, Jul 15 2017, 17:16:57)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['foo']
'bar'
>>> del os.environ['foo']
>>> os.system('echo $foo')

0

답변2

각 호출은 os.system()별도의 프로세스를 생성합니다. 그 안에서 작업 echo $$하고 PID가 각각 어떻게 변경되는지 확인하십시오.

따라서 첫 번째 프로세스는 내부에 변수가 있는 os.system()새 프로세스를 생성합니다 . unset이는 Python 스크립트 절차 내의 변수 값에는 영향을 미치지 않습니다. 그런 다음 첫 번째 생성된 프로세스가 종료되고 새 프로세스가 생성됩니다. 두 번째는 os.system()아직 건드리지 않은 Python 스크립트의 모든 환경 변수를 상속하는 이 새로운 프로세스를 생성합니다. 물론 두 번째로 생성된 프로세스는 unsetPython 스크립트의 프로세스에 존재하지 않았기 때문에 해당 변수를 볼 수 있으므로 새로운 하위 프로세스에서 손실되지 않습니다.

바라보다https://stackoverflow.com/questions/3575165/what-is-the-Cordirect-way-to-unset-a-linux-environment-variable-in-pythonPython에서 이를 수행하는 방법과http://docs.python.org/library/os.html#os.environ공식 문서용.

관련 정보