2011-05-11 17 views
308

Python komut dosyasında bazı ortam değişkenlerini ayarlamam gerekiyor ve ortam değişkenlerini ayarlamak için alt işlem olan python (kabuk komut dosyaları) denilen tüm diğer komut dosyalarını istiyorum. Değer bir sayıdır.Python'da çevre değişkenleri nasıl ayarlanır

os.environ["DEBUSSY"] = 1 yaparsam, 1 dizesinin dize olması gerektiğini söylemekten şikayet ediyor. Aynı zamanda python'da (komut dosyasının ilerleyen kısmında) ortam değişkenlerinin nasıl ayarlanacağını da öğrenmek istiyorum.

cevap

395

Çevre değişkenleri dizeleri olabilir, bu nedenle dize 1 değişken DEBUSSY ayarlamak için

os.environ["DEBUSSY"] = "1" 

kullanmalıdır. sizin hiçbir özel işlem gerekmez - bu değişken sonradan basitçe otomatik

print os.environ["DEBUSSY"] 

Çocuk süreçlerini kullanmak ebeveyn sürecinin çevreyi miras erişmek için.

+7

, os.environ değiştirerek aslında şimdiki süreç veya çocuk süreçleri için her iki sistem ortamı değiştirmez. Daha fazla bilgi için belgelere bakın: https://docs.python.org/2/library/os.html#os.environ – Evan

+2

@Evan Unix'in putenv() 'yi desteklemeyen bazı tarihsel varyantları olabilir. ama Unixen için zaten yapabileceğin bir şey yok. Çalıştığım AIX ve HPUX'un eski versiyonu bile destekledi. Eğer bugün onu desteklemeyen bir bilgisayar bulabiliyorsa, bu bilgisayarda Python'u çalıştırabilecekleri konusunda ciddi şüphelerim var. :) –

+0

** Dikkat: ** yukarıdaki Evan referansından alıntı yapmak için, * Ortamdaki bu değişiklikler os ile başlatılan alt süreçleri etkiler.system(), popen() veya fork() ve execv(). * Diğer bir deyişle, bu yaklaşımın programınızın çalışma şeklini değiştirmeyeceğini, yalnızca programınızın çocuklarının çalışma şeklini değiştirmeyeceğini unutmayın. Doğru, programınız ortam değişkenlerini ayarlayabilir ve okuyabilir, ancak sadece çocukları için yapılandırdığı ortamdan öğrenebilir. Ayrıca bakınız: [mevcut işlem ortamını değiştir] (http://stackoverflow.com/q/1178094/5025060). Şimdiye kadar bir Python senaryosunun ebeveynini değiştirmek için bir yol bulamadım. –

11

os.environ["DEBUSSY"] = '1' nedir? Ortam değişkenleri her zaman dizgidir. i os.environ [ "DEBUSSY"] = 1 yaparsanız

15

, bu dize olması gerektiğini söyleyerek şikayet.

Sonra da ben ayarlayın kez (script sonraki kısmen) Python ortam değişkenleri nasıl okunacağını bilmek istiyorum

os.environ["DEBUSSY"] = "1" 

yok.

Sadece

some_value = os.environ["DEBUSSY"] 
80

Sen kod sağlamlığı için biraz daha ileri yönlerini dikkate almak gerekebilir olduğu gibi os.environ["DEBUSSY"] kullanın;

bir ortam değişkeni olarak bir tamsayı değerli değişkeni depolamak

, muhtemelen

os.environ.get('DEBUSSY', 'Not Set') 

yerine 'denemelisiniz, hataları önlemek için düşünün, geri alma için daha sonra

os.environ['DEBUSSY'] = str(myintvariable) 

deneyin -1'

'Set değil için' yani

araya hepsi koymak
+3

Bir Linux makinesinde değişkeni nasıl ayarlayacağını söyleyebilir misiniz? Tüm platformlar? –

6

Ortam değişkenlerinize erişmek için os.environ sözlüğünü kullanabilirsiniz.

Şimdi, bir sorun, ortam değişkenlerinizi (bir **. Bat * dosyasındaki SET komutunu kullanarak) ayarlayan bir toplu iş dosyasını çalıştırmak için os.system kullanmayı denediysem, bunları gerçekten sizin için python ortamı (ancak os.system işleviyle oluşturulan alt işlem için).

import re 
import system 
import os 

def setEnvBat(batFilePath, verbose = False): 
    SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE) 
    SetEnvFile = open(batFilePath, "r") 
    SetEnvText = SetEnvFile.read() 
    SetEnvMatchList = re.findall(SetEnvPattern, SetEnvText) 

    for SetEnvMatch in SetEnvMatchList: 
     VarName=SetEnvMatch[0] 
     VarValue=SetEnvMatch[1] 
     if verbose: 
      print "%s=%s"%(VarName,VarValue) 
     os.environ[VarName]=VarValue 
15

Sen ortam değişkeni dize değeri atamak gerekir: aslında piton ortamında belirlenen değişkenleri almak için, bu komut dosyasını kullanabilirsiniz.

os.environ["DEBUSSY"] = "1"

bunu hiçbir değişiklik olacak, sadece sadece atandı cari işlem için geçerli olacaktır

print os.environ["DEBUSSY"]

Bu değişiklikleri kullanmak okumak veya ortam değişkeni yazdırmak isterseniz kalıcı değer. Çocuk süreçleri, ana sürecin çevresini otomatik olarak devralır.

bir piton sözlük gibi

enter image description here

+1

"Bu değişiklikler sadece atandığı mevcut süreç için geçerli olacak, kalıcı olarak değeri değiştirmeyecek. "Bu, bir ortam değişkeninin ayarlanması konusunda sahip olduğum bir soruyu yanıtladı. – spitfiredd

+0

Python kabuğundan çıkarsam ve daha önce os ortam kümesi ayarlanmışsa. – MeadowMuffins

4

os.environ davranacağını, bu yüzden tüm ortak Sözlük işlemleri gerçekleştirilebilir. Geçenlerde bir sorun haline çalıştırmak ve anlamıştı

>>> import os 
>>> os.environ.has_key('HOME') # Check an existing env. variable 
True 
>>> os.environ.has_key('FOO') # Check 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' 

Eğer çevreyi güncellenmesi diğer komut varsa,: anahtar varsa diğer yanıtlar sözü get ve set işlemlere ek olarak, aynı zamanda basitçe kontrol edebilirsiniz python komut dosyanız çalışırken, os.environ numaralı telefonu tekrar numaralı telefonu arayarak en son değerlerini yansıtmayacaktır. docs den

alıntı: Bu eşleme os modülü ithal ilk kez yakalanır

, tipik Python başlatma sırasında işleme site.py. bir parçası olarak Bu süre sonra yapılan ortama değişiklikleri, doğrudan os.environ değiştirilerek yapılan değişiklikler hariç, os.environ olarak yansıtılmaz. tüm ortam değişkenleri depolayan

os.environ.data, tüm çevre değerleri içeren dict nesnesidir:

>>> type(os.environ.data) 
<type 'dict'> 
3

Eğer ortam değişkenleri (değişkenleri kaldırmak/değiştirme/ekleme), iyi bir ile oynamak Uygulama, işlev tamamlandığında önceki durumu geri yüklemektir.

ortam değişkenlerini geri yüklemek için bu question tarif modified_environ bağlam yöneticisi gibi bir şey gerekebilir.

Klasik kullanımı: Bazı platformlarda

with modified_environ(DEBUSSY="1"): 
    call_my_function() 
İlgili konular