Saya perlu mengatur beberapa variabel lingkungan dalam skrip python dan saya ingin semua skrip lain yang dipanggil dari python untuk melihat set variabel lingkungan.
Jika aku melakukan
os.environ["DEBUSSY"] = 1`
itu mengeluh mengatakan bahwa 1
itu harus string.
Saya juga ingin tahu cara membaca variabel lingkungan dengan python (di bagian akhir skrip) setelah saya mengaturnya.
python
environment-variables
prahallada
sumber
sumber
Jawaban:
Variabel lingkungan harus berupa string, jadi gunakan
untuk mengatur variabel
DEBUSSY
ke string1
.Untuk mengakses variabel ini nanti, cukup gunakan:
Proses anak secara otomatis mewarisi variabel lingkungan dari proses induk - tidak diperlukan tindakan khusus dari Anda.
sumber
putenv()
, tetapi bagi mereka Unixen tidak ada yang bisa Anda lakukan. Bahkan AIX dan HPUX versi lama yang saya gunakan tidak mendukungnya. Jika ada orang yang benar-benar dapat menemukan komputer yang tidak mendukungnya hari ini, saya sangat ragu mereka akan dapat menjalankan Python di komputer itu. :)Anda mungkin perlu mempertimbangkan beberapa aspek lebih lanjut untuk ketahanan kode;
ketika Anda menyimpan variabel bernilai integer sebagai variabel lingkungan, cobalah
lalu untuk pengambilan, pertimbangkan bahwa untuk menghindari kesalahan, Anda harus mencoba
mungkin gantikan '-1' untuk 'Not Set'
jadi, untuk menyatukan semua itu
sumber
myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None
- dengan cara itu akan menjadi Tidak ada jika tidak ada nomor diberikanvalue_not_set = '-1'
) Kemudian, Anda dapat menggunakandebussy = int(os.environ.get('DEBUSSY', value_not_set))
os.environ
berperilaku seperti kamus python, sehingga semua operasi kamus umum dapat dilakukan. Selainget
danset
operasi yang disebutkan dalam jawaban lain, kami juga dapat memeriksa apakah ada kunci. Kunci dan nilai harus disimpan sebagai string .Python 3
Untuk python 3, kamus menggunakan kata kunci in dan bukannya has_key
Python 2
Ada satu hal penting yang perlu diperhatikan tentang penggunaan
os.environ
:Meskipun proses anak mewarisi lingkungan dari proses induk, saya telah menemukan masalah baru-baru ini dan menemukan, jika Anda memiliki skrip lain yang memperbarui lingkungan saat skrip python Anda berjalan, menelepon
os.environ
lagi tidak akan mencerminkan nilai terbaru .Kutipan dari dokumen :
os.environ.data
yang menyimpan semua variabel lingkungan, adalah objek dict, yang berisi semua nilai lingkungan:sumber
os.environ.data
diubah namanya menjadi Python 3.2 menjadios.environ._data
, awalan garis bawah yang menunjukkan bahwa Anda tidak harus membacanya secara langsung. Bagaimanapun, bagaimanapunos.environ._data
juga tidak akan memiliki nilai yang diperbarui.Lalu lakukan
Cukup gunakan
os.environ["DEBUSSY"]
, seperti padasumber
untuk Mengatur Variabel:
Metode penugasan item menggunakan kunci:
untuk mendapatkan atau memeriksa apakah ada atau tidak,
karena os.environ adalah contoh Anda dapat mencoba cara objek.
Metode 1:
akan mendapatkan
'1'
nilai pengembalianMetode 2:
Metode 3:
Metode 4:
sumber
Anda harus menetapkan nilai string ke variabel lingkungan.
os.environ["DEBUSSY"] = "1"
Jika Anda ingin membaca atau mencetak variabel lingkungan gunakan saja
print os.environ["DEBUSSY"]
Perubahan ini hanya akan efektif untuk proses saat ini di mana ia ditugaskan, tidak akan mengubah nilai secara permanen. Proses anak akan secara otomatis mewarisi lingkungan proses induk.
sumber
set [<name>=[<value>]]
tetapi hanya membuatnya untuk proses berjalan saat ini. Ketika saya menutup cmd itu tidak ada dan bahkan ketika itu terbuka, program lain tidak dapat melihatnya.Bagaimana dengan
os.environ["DEBUSSY"] = '1'
? Variabel lingkungan selalu bersifat string.sumber
Saya telah mencoba menambahkan variabel lingkungan. Tujuan saya adalah untuk menyimpan beberapa informasi pengguna ke variabel sistem sehingga saya dapat menggunakan variabel-variabel tersebut untuk solusi di masa depan, sebagai alternatif untuk mengkonfigurasi file. Namun, metode yang dijelaskan dalam kode di bawah ini tidak membantu saya sama sekali.
Blok kode sederhana ini berfungsi dengan baik, namun, variabel-variabel ini ada di dalam masing-masing proses sehingga Anda tidak akan menemukannya di tab variabel lingkungan dari pengaturan sistem windows. Cukup banyak kode di atas tidak memenuhi tujuan saya. Masalah ini dibahas di sini: variabel save problem
Upaya gagal lainnya. Jadi, akhirnya, saya berhasil menyimpan variabel dengan sukses di dalam register lingkungan jendela dengan meniru perintah shell windows yang dibungkus dalam kelas sistem paket os. Kode berikut menjelaskan upaya yang berhasil ini.
Saya harap ini akan bermanfaat bagi sebagian dari Anda.
sumber
Perlu dicatat bahwa jika Anda mencoba mengatur variabel lingkungan ke evaluasi bash, itu tidak akan menyimpan apa yang Anda harapkan. Contoh:
Ini tidak akan mengevaluasinya seperti di shell, jadi alih-alih mendapatkan
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
sebagai jalur Anda akan mendapatkan ekspresi literal$(/usr/libexec/java_home)
.Pastikan untuk mengevaluasinya sebelum mengatur variabel lingkungan, seperti:
sumber
Anda dapat menggunakan
os.environ
kamus untuk mengakses variabel lingkungan Anda.Sekarang, masalah yang saya miliki adalah bahwa jika saya mencoba menggunakan
os.system
untuk menjalankan file batch yang menetapkan variabel lingkungan Anda (menggunakan perintah SET dalam file **. Bat *) itu tidak akan benar-benar mengaturnya untuk lingkungan python Anda (tetapi untuk proses anak yang dibuat denganos.system
fungsi). Untuk benar-benar mendapatkan variabel yang ditetapkan di lingkungan python, saya menggunakan skrip ini:sumber
Saat Anda bermain dengan variabel lingkungan (tambah / ubah / hapus variabel), praktik yang baik adalah mengembalikan status sebelumnya pada penyelesaian fungsi.
Anda mungkin memerlukan sesuatu seperti yang
modified_environ
dijelaskan oleh manajer konteks dalam pertanyaan ini untuk memulihkan variabel lingkungan.Penggunaan klasik:
sumber