Entuk, nambah, nimpa, lan mbusak variabel lingkungan ing Python (os.en lingkungan)

Bisnis

Variabel lingkungan bisa dijupuk, dicenthang, disetel (ditambahake utawa ditimpa), lan mbusak ing program Python nggunakake os.en environment. Elinga yen pangowahan sing digawe kanthi nyetel utawa mbusak variabel lingkungan mung efektif ing program Python. Ora ateges variabel lingkungan sistem bakal ditulis maneh.

Informasi ing ngisor iki diwenehake ing kene.

  • os.environ
  • Entuk variabel lingkungan.
  • Setel (nambah / nimpa) variabel lingkungan
  • Mbusak variabel lingkungan
  • Pengaruh ngganti variabel lingkungan
  • Ngalih proses miturut variabel lingkungan

Ngimpor lan gunakake modul os. Amarga iku perpustakaan standar, ora dibutuhake instalasi tambahan. Modul subproses uga kalebu ing perpustakaan standar.

import os
import subprocess

os.en Lingkungan

Jinis os.en Lingkungan yaiku os._En environment.

print(type(os.environ))
# <class 'os._Environ'>

os._Environ minangka obyek jinis peta kanthi pasangan kunci lan nilai, lan duwe cara sing padha karo kamus (tipe dict). Jeneng variabel lingkungan minangka kunci, lan regane yaiku nilai.

Isi os.en environment bakal dimuat nalika modul os diimpor. Isi os.en lingkungan ora bakal dianyari sanajan variabel lingkungan sistem diganti kanthi cara liya nalika program mlaku.

Dhaptar ditampilake kanthi print ().

# print(os.environ)

Kaya dene kamus, sampeyan bisa nggunakake cara ing ngisor iki, utawa digunakake kanggo mriksa eksistensi kunci lan nilai.

  • keys()
  • values()

Pemrosesan kunci lan nilai biasane padha karo kamus. Tuladhane kaya ing ngisor iki.

Entuk variabel lingkungan.

os.environ[Environment variable name]
Iki bakal ngidini sampeyan entuk nilai variabel lingkungan, nanging yen sampeyan nemtokake jeneng variabel lingkungan sing ora ana, sampeyan bakal entuk kesalahan (KeyError).

print(os.environ['LANG'])
# ja_JP.UTF-8

# print(os.environ['NEW_KEY'])
# KeyError: 'NEW_KEY'

Cara entuk () os.en environment bisa digunakake kanggo entuk nilai gawan yen ora ana. Iki uga padha karo kamus.

print(os.environ.get('LANG'))
# ja_JP.UTF-8

print(os.environ.get('NEW_KEY'))
# None

print(os.environ.get('NEW_KEY', 'default'))
# default

Fungsi os.getenv () uga kasedhiya. Kaya metode get () kamus, ngasilake nilai gawan yen kunci ora ana. Fungsi iki migunani yen sampeyan mung pengin entuk lan mriksa regane variabel lingkungan.

print(os.getenv('LANG'))
# ja_JP.UTF-8

print(os.getenv('NEW_KEY'))
# None

print(os.getenv('NEW_KEY', 'default'))
# default

Setel (nambah / nimpa) variabel lingkungan

os.environ[Environment variable name]
Kanthi menehi nilai kanggo iki, sampeyan bisa nyetel variabel lingkungan.

Nalika jeneng variabel lingkungan anyar ditemtokake, variabel lingkungan mentas ditambahake, lan yen ana jeneng variabel lingkungan sing ana, nilai variabel lingkungan bakal ditimpa.

os.environ['NEW_KEY'] = 'test'

print(os.environ['NEW_KEY'])
# test

os.environ['NEW_KEY'] = 'test2'

print(os.environ['NEW_KEY'])
# test2

Elinga yen menehi tugas liyane kajaba senar bakal nyebabake kesalahan (TypeError). Yen sampeyan pengin menehi angka angka, pilih minangka senar.

# os.environ['NEW_KEY'] = 100
# TypeError: str expected, not int

os.environ['NEW_KEY'] = '100'

Fungsi os.putenv () uga kasedhiya. Nanging, nilai os.en environment ora dianyari nalika disetel dening os.putenv (). Amarga alasan iki, luwih becik nemtokake kunci (jeneng variabel lingkungan) os.en lingkungan lan menehi nilai kaya sing dituduhake ing conto ing ndhuwur.

Yen putenv () didhukung, tugas menyang item ing os.en environment kanthi otomatis bakal diowahi dadi telpon sing cocog karo putenv (). Ing prakteke, menehi item ing os.en environment minangka operasi sing disenengi, amarga telpon langsung menyang putenv () ora bakal nganyari os.en environment.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Kaya sing kasebut sadurunge, pangowahan sing digawe kanthi nambah utawa nimpa variabel lingkungan mung efektif ing program Python. Ora ateges variabel lingkungan sistem bakal ditulis maneh.

Elinga yen ngganti regane bisa uga nyebabake bocor memori gumantung karo OS.

Cathetan: Ing sawetara platform, kalebu FreeBSD lan Mac OS X, ngganti nilai lingkungan bisa nyebabake bocor memori.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Iki amarga spesifikasi putenv () OS kasebut dhewe.

Successive calls to setenv() or putenv() assigning a differently sized value to the same name will result in a memory leak. The FreeBSD seman-tics semantics for these functions (namely, that the contents of value are copied and that old values remain accessible indefinitely) make this bug unavoidable.
Mac OS X Manual Page For putenv(3)

Mbusak variabel lingkungan

Kanggo mbusak variabel lingkungan, gunakake cara pop () os.en environment utawa del del statement. Padha karo kamus.

Ing ngisor iki minangka conto pop ().

pop () ngasilake rega variabel lingkungan sing wis dihapus. Kanthi gawan, nemtokake variabel lingkungan sing ora ana bakal nyebabake kesalahan (KeyError), nanging yen nemtokake argumen kaping pindho bakal ngasilake nilai variabel lingkungan yen ora ana.

print(os.environ.pop('NEW_KEY'))
# 100

# print(os.environ.pop('NEW_KEY'))
# KeyError: 'NEW_KEY'

print(os.environ.pop('NEW_KEY', None))
# None

Ing ngisor iki minangka conto del.

Variabel lingkungan ditambahake maneh, banjur busak. Yen variabel lingkungan ora ana, kesalahan (KeyError).

os.environ['NEW_KEY'] = '100'

print(os.getenv('NEW_KEY'))
# 100

del os.environ['NEW_KEY']

print(os.getenv('NEW_KEY'))
# None

# del os.environ['NEW_KEY']
# KeyError: 'NEW_KEY'

Fungsi os.unsetenv () uga kasedhiya. Nanging, kaya karo os.putenv (), regane os.en Lingkungan ora dianyari nalika dirusak dening os.unsetenv (). Mula, luwih becik nemtokake kunci (jeneng variabel lingkungan) os.en lingkungan lan busak kaya sing dituduhake ing conto ing ndhuwur.

Yen unsetenv () didhukung, mbusak item ing os.environ kanthi otomatis nerjemahake menyang panggilan sing cocog karo unsetenv (). Ing prakteke, mbusak item ing os.environ minangka operasi sing disenengi, amarga telpon langsung menyang unsetenv () ora bakal nganyari os.en Lingkungan.
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Mbusak variabel lingkungan uga efektif ing program Python. Ora mbusak variabel lingkungan sistem.

Pengaruh ngganti variabel lingkungan

Kaya sing wis dak tulis bola-bali, ngganti (nyetel utawa mbusak) variabel lingkungan os.en Lingkungan ora ngganti variabel lingkungan sistem, nanging mengaruhi sub-proses sing diluncurake ing program kasebut.

Kode ing ngisor iki ora bakal bisa diarepake kaya ing Windows amarga ora ana variabel lingkungan LANG lan isi prentah tanggal beda.

Nelpon printah tanggal ing modul subproses.

Asil output saka printah tanggal ganti gumantung karo variabel lingkungan LANG.

print(os.getenv('LANG'))
# ja_JP.UTF-8

print(subprocess.check_output('date', encoding='utf-8'))
# 2018年 7月12日 木曜日 20時54分13秒 JST
# 

os.environ['LANG'] = 'en_US'

print(subprocess.check_output('date', encoding='utf-8'))
# Thu Jul 12 20:54:13 JST 2018
# 

Kanggo penjelasan, kita wis ngowahi variabel lingkungan LANG ing os.en Lingkungan, nanging Python nyedhiyakake modul lokal kanggo ngontrol lokal.

Ngalih proses miturut variabel lingkungan

Sampeyan uga bisa ngoper proses miturut rega variabel lingkungan.

Mangkene conto ngganti output miturut variabel lingkungan LANG ing setelan basa. Ing kene kita nggunakake metode startswith () kanggo nemtokake manawa senar diwiwiti karo senar sing ditemtokake, nanging yen sampeyan pengin nemtokake match sing pas, sampeyan bisa nggunakake “==” kanggo mbandhingake.

print(os.getenv('LANG'))
# en_US

if os.getenv('LANG').startswith('ja'):
    print('こんにちは')
else:
    print('Hello')
# Hello

os.environ['LANG'] = 'ja_JP'

if os.getenv('LANG').startswith('ja'):
    print('こんにちは')
else:
    print('Hello')
# こんにちは

Kajaba iku, yen variabel lingkungan disetel kanggo nuduhake lingkungan pangembangan lan lingkungan produksi, kayata, sampeyan bisa entuk nilai-nilai variabel kasebut lan ngganti proses kasebut.

Copied title and URL