如何在 Python 中取消设置“http_proxy”环境变量

Sum*_*Sum 5 linux proxy python environment-variables

我正在使用下面的 python 代码来重置http_proxyLinux CentOS 6 中的环境变量,但它并没有为 Python 脚本的其余部分取消设置变量。

代码:

 import os 
 print "Unsetting http..." 
 os.system("unset http_proxy") 
 os.system("echo $http_proxy") 
 print "http is reset"
Run Code Online (Sandbox Code Playgroud)

输出:

Unsetting http...
http://web-proxy.xxxx.xxxxxxx.net:8080
http is reset
Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

Dop*_*oti 10

每次调用都os.system()在其自己的子 shell中运行,并具有自己的全新环境:

>>> import os
>>> os.system("echo $$")
97678
0
>>> os.system("echo $$")
97679
0
Run Code Online (Sandbox Code Playgroud)

正在取消设置http_proxy变量,但随后您的子 shell 已完成执行命令(即:)unset,并终止。然后,您可以使用新的环境启动一个新的子 shell,在其中运行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
Run Code Online (Sandbox Code Playgroud)

  • [Python 中的putenv/unsetenv API 基本坏了](https://ideone.com/hKck3c),因为`getenv` 是通过`os.environ`,但是`putenv` 和`unsetenv` 不更新`os .环境`。putenv 和 unsetenv 更新环境变量,但无法通过 `os.environ` 或 `getenv` 检查它们的效果。从`os.environ` 中删除密钥要好得多。 (2认同)