【问题标题】:How to clear os.environ value for only one variable in Python如何在 Python 中仅清除一个变量的 os.environ 值
【发布时间】:2013-08-13 05:40:02
【问题描述】:

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

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

【问题讨论】:

  • 清晰是什么意思? del os.environ[...] 有效吗?如果没有,只需将其设置为 ''
  • 你是从这个脚本调用第二个脚本还是在脚本之外调用第二个脚本?因为如果它在脚本之外,您不必清除变量。当您设置 os.environ[something] 来更改特定 python 进程内的环境时,它不是永久性的。
  • 非常相似的问题有 35+ 票:stackoverflow.com/questions/3575165/…

标签: python environment-variables


【解决方案1】:

试试

del os.environ["PYTHONHOME"]

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

【讨论】:

    【解决方案2】:

    使用

    os.environ.pop("PYTHONHOME")
    

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

    【讨论】:

      【解决方案3】:

      要为被调用的脚本取消设置环境变量only,以下也可以。

      os.unsetenv('PYTHONHOME')
      

      更新:

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

      Python documentation

      取消设置(删除)名为 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 设置环境仅对设置它的进程(及其子进程)来说是本地的。正如您在最后看到的那样,它对全局环境变量没有影响。

      【讨论】:

      • 根据docs:“对unsetenv()的调用不会更新os.environ,因此实际上最好删除os.environ的项目。”所以我会建议其他解决方案中的任何一个。
      猜你喜欢
      • 2018-08-29
      • 2012-01-04
      • 2021-06-03
      • 1970-01-01
      • 2021-10-19
      • 2015-08-10
      • 1970-01-01
      • 2020-07-27
      • 2014-05-20
      相关资源
      最近更新 更多