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