【发布时间】:2013-07-16 08:07:25
【问题描述】:
我想确保os.system('env') 不包含某些特定变量myname
在~/.bashrc 中导出为export myname=csj
因此,我写了下面的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
我不明白为什么我在os.system('env | grep myname') 上仍然得到csj3?
【问题讨论】:
-
似乎发生了某种竞争情况。您是否始终如一地获得相同的结果?如果添加第 4 轮,
myname=csj3会持续存在,还是仅在第 4 轮中保持myname=csj4? -
它总是得到相同的结果。实际上在我真正的python脚本中,第二个putenv()之间有很多东西/代码,让我很困惑..现在我在第二个putenv()之前放了一个time.sleep(1)和
while [ 1 ]; do python env.py ; sleep 1; done来执行脚本,总是得到相同的结果。 -
如果我删除一行
if 'myname' in os.environ: os.environ.pop('myname'),令人惊讶的是,我在os.system('env | grep myname')上一无所获,似乎解决了问题。虽然我还是不知道为什么……
标签: python