15

我正在设置os.environ['PYTHONHOME']="/home/user/OpenPrint/py2.6"我的 Python 脚本

但是在脚本结束时,我需要清除这个变量,以便我可以从不同的位置调用另一个 python 脚本。有人可以告诉我该怎么做吗?我试过os.environ.clear()了,但这也清除了所有其他变量。

4

3 回答 3

23

利用

os.environ.pop("PYTHONHOME")

请参阅http://docs.python.org/2/library/os.html上的(最少)文档

于 2013-08-12T00:22:11.987 回答
22

尝试

del os.environ["PYTHONHOME"]

这从 os.environ 字典中删除变量“PYTHONHOME”。

于 2013-08-12T00:22:07.687 回答
4

要仅为正在调用的脚本取消设置环境变量,以下操作也可以。

os.unsetenv('PYTHONHOME')

更新:

如果您必须删除其余流程的环境os.environ.pop('PYTHONHOME')del os.environ['PYTHONHOME']更好。但是,如果您只想为您要分叉的脚本取消设置环境变量,则os.unsetenv('PYTHONHOME')效果会更好,因为它仍将环境变量保留在当前进程环境中。但是,这也取决于您调用脚本的方式。

Python文档

取消设置(删除)名为 key 的环境变量。对环境的此类更改会影响以os.system()popen()fork()和开头的子流程execv()

请参见下面的示例。

示例脚本 (/tmp/env.py)

import os
print os.environ["VIFI"]

现在让我们看看以下内容。

vifi-a01:~ vifi$ python
Python 2.7.16 (default, Oct 16 2019, 00:34:56)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> 'VIFI' in os.environ   # EnvVar not present initially.
False
>>> os.environ['VIFI'] = 'V' # set the env var
>>> os.system('python /tmp/env.py')  # child process/script gets it
V
0
>>> os.unsetenv('VIFI')   # unset env only for child script
>>> os.system('python /tmp/env.py')
Traceback (most recent call last):
  File "/tmp/env.py", line 2, in <module>
    print os.environ["VIFI"]
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'VIFI'
256
>>> 'VIFI' in os.environ    # rest of the flow still has it 
True
>>> os.environ['VIFI'] = 'V'  # set it again for child process/script
>>> os.system('python /tmp/env.py') 
V
0
>>>
>>> os.environ["VIFI"] = "V"  
>>> ^D
vifi-a01:~ vifi$ echo $VIFI

vifi-a01:~ vifi$ printenv | grep "VIFI"
vifi-a01:~ vifi$

顺便说一句,设置环境os.environ仅对设置它的进程(及其子进程)来说是本地的。正如您在最后看到的那样,它对全局环境变量没有影响。

于 2016-10-26T16:09:14.010 回答