我正在设置os.environ['PYTHONHOME']="/home/user/OpenPrint/py2.6"
我的 Python 脚本
但是在脚本结束时,我需要清除这个变量,以便我可以从不同的位置调用另一个 python 脚本。有人可以告诉我该怎么做吗?我试过os.environ.clear()
了,但这也清除了所有其他变量。
我正在设置os.environ['PYTHONHOME']="/home/user/OpenPrint/py2.6"
我的 Python 脚本
但是在脚本结束时,我需要清除这个变量,以便我可以从不同的位置调用另一个 python 脚本。有人可以告诉我该怎么做吗?我试过os.environ.clear()
了,但这也清除了所有其他变量。
尝试
del os.environ["PYTHONHOME"]
这从 os.environ 字典中删除变量“PYTHONHOME”。
要仅为正在调用的脚本取消设置环境变量,以下操作也可以。
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
仅对设置它的进程(及其子进程)来说是本地的。正如您在最后看到的那样,它对全局环境变量没有影响。