다음 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 스크립트의 모든 환경 변수를 상속하는 이 새로운 프로세스를 생성합니다. 물론 두 번째로 생성된 프로세스는 unset
Python 스크립트의 프로세스에 존재하지 않았기 때문에 해당 변수를 볼 수 있으므로 새로운 하위 프로세스에서 손실되지 않습니다.
바라보다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공식 문서용.