voglio assicurare os.system('env')
non contiene qualche variabile specifica myname
che è l'esportazione in ~/.bashrc
come export myname=csj
pitone os.environ, os.putenv,/usr/bin/env
Pertanto, ho scritto qui di seguito codice 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()
Penso esaminare sia os.environ['myname']
e os.getenv('myname')
e quindi eliminarli, se esiste, può garantire os.system('env | grep myname')
ottiene nulla.
Tuttavia, il risultato è:
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
Non capisco il motivo per cui ho ancora avuto csj3
su os.system('env | grep myname')
?
Sembra che si verifichi una condizione di competizione. Hai gli stessi risultati in modo coerente?Se aggiungi un quarto round, 'myname = csj3' persist, o solo' myname = csj4' nel quarto round? – chepner
ha sempre lo stesso risultato. In realtà, nel mio vero script python, ci sono molte cose/codice tra il secondo putenv(), mi confondono molto. Ora ho messo un time.sleep (1) prima del 2 ° putenv(), e 'while [1]; do python env.py; dormire 1; fatto per eseguire lo script, ha sempre ottenuto lo stesso risultato. – CSJ
se elimino una riga 'if 'myname' in os.environ: os.environ.pop ('myname')', sorprendentemente, non ho ottenuto nulla su 'os.system ('env | grep myname')' e sembra risolvere il problema. Anche se non so ancora perché ... – CSJ