python os.environ, os.putenv, /usr/bin/env -
i want ensure os.system('env')
not contain specific variable myname
export in ~/.bashrc
export myname=csj
therefore, wrote below python code:
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()
i think examine both os.environ['myname']
, os.getenv('myname')
, delete them if exist, can ensure os.system('env | grep myname')
nothing.
however, result is:
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
i don't understand why still got csj3
on os.system('env | grep myname')
?
from docs:
note: calling putenv() directly not change os.environ, it’s better modify os.environ.
for unsetenv
there similar warining:
however, calls unsetenv() don’t update os.environ, preferable delete items of os.environ.
getenv
returns value os.environ
, it's implementation shows, using state seems value isn't set when python, while acutally in real environment. way can think of call c getenv function using ctypes...
if modify code use os.environ
isnstead of calling putenv
/unsetenv
works expected:
import os def print_all(): print "os.environ['myname']=%s" % (os.environ['myname'] if 'myname' in os.environ else "none") os.system('env | grep myname') print def delete_myname(): if 'myname' in os.environ: os.environ.pop('myname') print_all() os.environ['myname'] = 'csj2' print "---------------------" print_all() delete_myname() print_all() os.environ['myname'] = 'csj3' print "---------------------" print_all() delete_myname() print_all()
output:
$ myname=somevalue python2 test.py os.environ['myname']=somevalue myname=somevalue --------------------- os.environ['myname']=csj2 myname=csj2 os.environ['myname']=none --------------------- os.environ['myname']=csj3 myname=csj3 os.environ['myname']=none
Comments
Post a Comment