如何在Python中仅清除一个变量的os.environ值

如何在Python中仅清除一个变量的os.environ值,python,environment-variables,Python,Environment Variables,我正在Python脚本中设置os.environ['PYTHONHOME']=“/home/user/OpenPrint/py2.6” 但是在脚本结束时,我需要清除这个变量,以便可以从不同的位置调用另一个python脚本。有人能告诉我怎么做吗?我尝试了os.environ.clear(),但这也会清除所有其他变量。试试看 del os.environ["PYTHONHOME"] 这将从os.environ目录中删除变量“PYTHONHOME”。使用 os.environ.pop("PYTHON

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

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

试试看

del os.environ["PYTHONHOME"]
这将从os.environ目录中删除变量“PYTHONHOME”。

使用

os.environ.pop("PYTHONHOME")

请参见

中的(最低限度)文档,以仅为被调用的脚本取消设置环境变量,以下操作也可以

os.unsetenv('PYTHONHOME')

更新: 如果必须为流的其余部分删除环境,则
os.environ.pop('PYTHONHOME')
delos.environ['PYTHONHOME']
更好。但是,如果您只想为在末尾分叉的脚本取消设置环境变量,那么unsetenv('PYTHONHOME')工作得更好,因为它仍然将环境变量保留在当前流程环境中。但是,这也将取决于您如何调用脚本

蟒蛇说

取消设置(删除)名为key的环境变量。这些变化对 环境影响从
os.system()
popen()
fork()
execv()

请参见下面的示例

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

现在让我们看看下面的内容

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$
vifi-a01:~vifi$python
Python 2.7.16(默认值,2019年10月16日,00:34:56)
[GCC 4.2.1达尔文兼容苹果LLVM 10.0.1(clang-1001.0.37.14)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入操作系统
>>>os.environ#EnvVar中的“VIFI”最初不存在。
假的
>>>os.environ['VIFI']='V'#设置环境变量
>>>system('python/tmp/env.py')#子进程/脚本获取它
v
0
>>>os.unsetenv('VIFI')#仅用于子脚本的unsetenv
>>>系统('python/tmp/env.py')
回溯(最近一次呼叫最后一次):
文件“/tmp/env.py”,第2行,在
打印操作系统环境[“VIFI”]
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py”,第40行,在__
升起钥匙错误(钥匙)
键错误:“VIFI”
256
>>>os.environ中的“VIFI”#流的其余部分仍然有它
真的
>>>os.environ['VIFI']='V'#为子进程/脚本再次设置它
>>>系统('python/tmp/env.py')
v
0
>>>
>>>操作系统环境[“VIFI”]=“V”
>>>^D
vifi-a01:~vifi$echo$vifi
vifi-a01:~vifi$printenv | grep“vifi”
vifi-a01:~vifi$

顺便说一句,通过
os.environ
设置环境只对设置环境的进程(及其子进程)进行本地设置。正如您在最后看到的,它对全球环境变量没有影响。

您所说的“清除”是什么意思?del os.environ[…]有效吗?如果不是,只需将其设置为“您是从该脚本调用第二个脚本,还是在脚本外部调用?因为如果它在脚本之外,则不必清除变量。当你设置
os.environ[something]
来改变特定python进程内的环境时,它不是永久性的。类似的问题有35次以上的投票:根据:“调用
unsetenv()
不更新
os.environ
,因此实际上最好删除
os.environ
的项目。”因此,我会建议其他任何一种解决方案。
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$