Jeg trenger å angi noen miljøvariabler i python-skriptet, og jeg vil at alle de andre skriptene som kalles fra python (shell-skript) som vil være underordnede prosesser for å se miljøvariablene satt. Verdien er et tall.
Hvis jeg gjør os.envir["DEBUSSY"] = 1
, klager den og sier at 1
må være streng.
Jeg vil også vite hvordan jeg kan lese miljøvariablene i python (i den senere delen av skriptet) når jeg har angitt det.
Miljøvariabler må være strenger, så bruk
os.environ["DEBUSSY"] = "1"
for å sette variabelen DEBUSSY
til strengen 1
.
For å få tilgang til denne variabelen senere, bruker du bare:
print(os.environ["DEBUSSY"])
Underordnede prosesser arver automatisk miljøvariablene til den overordnede prosessen - ingen spesiell handling fra din side er nødvendig.
Du må kanskje vurdere noen ytterligere aspekter for å gjøre koden mer robust;
Når du lagrer en heltallsvariabel som en miljøvariabel, kan du prøve å bruke
os.environ['DEBUSSY'] = str(myintvariable)
så for henting, bør du vurdere at for å unngå feil, bør du prøve
os.environ.get('DEBUSSY', 'Not Set')
eventuelt erstatte '-1' med 'Not Set'.
så, for å sette det hele sammen
myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))
print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)
os.envir
oppfører seg som en python-ordbok, så alle vanlige ordbokoperasjoner kan utføres. I tillegg til get
- og set
-operasjonene som er nevnt i de andre svarene, kan vi også ganske enkelt sjekke om en nøkkel finnes
Python 3
For python 3 bruker ordbøker nøkkelordet in i stedet for has_key.
>>> import os
>>> 'HOME' in os.environ # Check an existing env. variable
True
...
Python 2
>>> import os
>>> os.environ.has_key('HOME') # Check an existing env. variable
True
>>> os.environ.has_key('FOO') # Check for a non existing variable
False
>>> os.environ['FOO'] = '1' # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO') # Retrieve the value
'1'
Det er en viktig ting å merke seg ved bruk av os.envir
:
Selv om underordnede prosesser arver miljøet fra den overordnede prosessen, hadde jeg nylig støtt på et problem og funnet ut at hvis du har andre skript som oppdaterer miljøet mens python-skriptet ditt kjører, vil det å kalle os.envir
igjen ikke gjenspeile de siste verdiene.
Utdrag fra docs:
Denne tilordningen fanges første gang OS-modulen importeres, vanligvis under oppstart av Python som en del av behandlingen av site.py. Endringer endringer i miljøet som gjøres etter dette tidspunktet, gjenspeiles ikke i os.envir, bortsett fra endringer som gjøres ved å endre os.envir direkte.
os.envir.data, som lagrer alle miljøvariablene, er et dict-objekt som inneholder alle miljøverdiene:
>>> type(os.environ.data) # changed to _data since v3.2 (refer comment below)
<type 'dict'>
hvis jeg gjør os.envir["DEBUSSY"] = 1, den klager og sier at 1 har å være streng.
Så gjør
os.environ["DEBUSSY"] = "1"
Jeg vil også vite hvordan jeg leser de miljøvariablene i python (i den senere del av skriptet) når jeg har angitt det.
Bare bruk os.envir["DEBUSSY"]
, som i
some_value = os.environ["DEBUSSY"]