我想确保os.system('env')
不包含某些特定变量myname
以~/.bashrc
形式导出
因此,我编写了以下python代码:
import os
def print_all():
print "os.environ['myname']=%s" % os.environ.get('myname')
print "os.getenv('myname')=%s" % os.getenv('myname')
os.system('env | grep myname')
print
def delete_myname():
if 'myname' in os.environ: os.environ.pop('myname')
if os.getenv('myname'): os.unsetenv('myname')
print_all()
os.putenv('myname', 'csj2')
print "---------------------"
delete_myname()
print_all()
os.putenv('myname', 'csj3')
print "---------------------"
delete_myname()
print_all()
我想检查一下os.environ['myname']
和os.getenv('myname')
如果有的话删除它们,
可以确保os.system('env | grep myname')
什么都得不到。
然而,结果是:
os.environ['myname']=csj
os.getenv('myname')=csj
myname=csj
---------------------
os.environ['myname']=None
os.getenv('myname')=None
---------------------
os.environ['myname']=None
os.getenv('myname')=None
myname=csj3
我不明白为什么我还有csj3
在os.system('env | grep myname')
上?
从docs:
对于
unsetenv
有一个类似的警告:getenv
只返回来自os.environ
的值,因为它是implementation shows,所以通过使用它,您会进入一种状态,当您从python中查找它时,它似乎没有设置,而实际上它在真实环境中。现在我能想到的唯一方法是使用ctypes调用cGetEnv函数。。。如果我修改您的代码以使用
os.environ
则不必调用putenv
/unsetenv
所有操作都按预期工作:输出:
一个好的做法是:
myname
环境变量(如果存在)myname
环境变量。Yu可以使用类似于本文中描述的
modified_environ
上下文管理器这样的东西轻松地做到这一点。相关问题 更多 >
编程相关推荐