Найти в Дзене
programmer's notes (python and more)

Стандартные библиотеки в Python. Библиотека os. Переменные окружения. Приложение к видео 12

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Алгоритмы на Python | programmer's notes | Дзен

Приложение к уроку

Переменные окружения и библиотека os

Введение в переменные окружения

Всё, что будет написано ниже относится к операционной системе Linux, но в значительной степени будет справедливо и для Windows.

Переменные окружения или среды это набор значений, привязанных к некоторым именам. Эти значения используются самой системой и прикладными программами. Окружение представляет собой строки типа

name1=значение

По имени можно получить значение, например, набрав в командной строке

echo $name1

Все переменные окружения следует разделить на три класса

  • Переменные создаются во время запуска операционной системы и доступны для всех пользователей.
  • Переменные создаются при входе в систему конкретного пользователя.
  • Локальные переменные создаются работающим процессом. Они существуют пока работает процесс.

При запуске приложения ему передаются переменные окружения своего родителя. Если работающее приложение (процесс) создало свои локальные переменные окружения и запустило дочерний процесс, то дочерний процесс получает и все переменные окружения. Таким образом родительский процесс может передать дочернему набор определённых данных.

Для того, чтобы получить список строк окружения, полученных программой-терминалом от запускающей системы, можно набрать команду env. Строки окружения будут выведены в консоль. Ниже дан фрагмент строк окружения для моей системы

TINC=/usr/lib64/qt3/include
MC_SID=3400
XDG_MENU_PREFIX=xfce-
LANG=ru_RU.UTF-8
HISTCONTROL=ignoreboth
LESS=-MM
DISPLAY=:0.0
PROFILEHOME=
HOSTNAME=host-101
QTDIR=/usr/lib64/qt3
SHELL_SESSION_ID=bb2b05cc9d874234946ba335e08aad28
MC_TMPDIR=/tmp/.private/vladislav/mc-vladislav
GPG_TTY=не телетайп
COLORTERM=truecolor
JAVA_HOME=/usr/lib/jvm/jre
XDG_VTNR=1
GTK3_MODULES=xapp-gtk3-module
SSH_AUTH_SOCK=/home/vladislav/.ssh/agent

Смыслы некоторых переменных можно понять по из именам и их значениям, о других можно узнать просто набрав в поисковой системе.

Для того, чтобы добавить переменную в командной строке, можно написать просто

vr1="значение 1"

Команда сработает и мы сможем посмотреть переменную

echo $vr1

Но если мы опять выполним env, то в списке переменной не увидим. env выдаёт только системные, но не локальные переменные. Для того, чтобы увидеть весь список используем команду set.

Следует отметить, что переменная заданная простым присвоением, является полностью локальной и не передаётся дочерним процессам. Предназначение таких переменных это хранение данных во время работы приложения.

Для удаления переменной можно использовать команду unset

unset vr1

После этой команды переменной в списке не будет. Можно просто присвоить vr1 пустое значение, тогда в списке она останется, но без значения.

Для создания переменной в окружении возможна запись

export vr1="Значение 435"

В этом случае переменная будет присутствовать в списке, получаемом командой env.

Именно такого типа переменные будут передаваться дочерним процессам.

Возможности библиотеки os

Поскольку библиотека os является как бы таким переходником между приложением и операционной системой, то, конечно в ней есть и средства работы с переменными окружения.

Тут достаточно привести несколько простых примеров, чтобы понять как всё это работает

#!/usr/bin/python3
import os
print(os.environ['HOME'])
print(os.getenv('HOME'))
print(os.environ['PATH'])
print(os.get_exec_path())

Результат выполнения фрагмента программы

/home/vladislav
/home/vladislav
/home/vladislav/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
['/home/vladislav/bin', '/usr/local/bin', '/usr/bin', '/bin', '/usr/games']

os.environ это в сущности словарик. Его ключами являются имена переменных. Поэтому можно использовать обычные средства работы со словарями. Но есть и специальные метод, например getenv(). С помощью него также можно получить значение переменно. Метод os.get_exec_path() можно использовать для получения значения переменной PATH. В форме списка, как можно видеть.

Кстати поскольку, os.environ это словарик, то значение его можно получить просто

print(os.environ)

или красиво

print(*[t1 + '='+ os.environ[t1] for t1 in os.environ], sep='\n')

Ну и, наконец, еще один пример

#!/usr/bin/python3
import os
os.environ['vr1'] = 'окружение'
print(os.environ['vr1'])
print(os.getenv('vr1'))

Результат выполнения

окружение
окружение

Ну здесь в принципе все понятно. Обычное свойство словаря.

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Языки приходят и уходят, только Си вечен
Языки приходят и уходят, только Си вечен