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

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -