How to use bash Environment Variables in Python - part 1

Although environment variables apply to all modern systems (Linux, BSD, Mac, or Windows), this series of articles is focused on environment variables in the Bash shell on Linux.

Getting the environment variables - part 1

In Python, bash environment variables are implemented and accessed through the os.environ package:

from os import environ

As sometimes you might need to see a complete list of all bash environment variables that are set on your system, you have to call it:

print (environ)

Because the os.environ is a dictionary-like object, when we print it, we get all the environment variables name and values, in a dictionary-like structure:

{'LC_NUMERIC': 'fr_FR.UTF-8', 'QT4_IM_MODULE': 'xim', 'GJS_DEBUG_OUTPUT': 'stderr', 'XDG_CURRENT_DESKTOP': 'ubuntu:GNOME', 'LC_PAPER': 'fr_FR.UTF-8', 'QT_IM_MODULE': 'ibus', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/etc/xdg', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/lib/jvm/default-java/bin:/root/Android/Sdk/tools:/root/Android/Sdk/platform-tools', 'XDG_VTNR': '7', 'DISPLAY': ':0', 'SSH_AGENT_PID': '3808', 'LANG': 'en_US.UTF-8', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'XDG_SESSION_PATH': '/org/freedesktop/DisplayManager/Session0', 'LANGUAGE': 'en_US', 'GPG_AGENT_INFO': '/run/user/1000/gnupg/S.gpg-agent:0:1', 'LC_MEASUREMENT': 'fr_FR.UTF-8', 'MANDATORY_PATH': '/usr/share/gconf/ubuntu.mandatory.path', 'QT_ACCESSIBILITY': '1', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'CLUTTER_IM_MODULE': 'xim', 'TEXTDOMAIN': 'im-config', 'XMODIFIERS': '@im=ibus', 'GIO_LAUNCHED_DESKTOP_FILE_PID': '1963', 'LIBVIRT_DEFAULT_URI': 'qemu:///system', 'JAVA_HOME': '/usr/lib/jvm/default-java/bin', 'XDG_SESSION_DESKTOP': 'ubuntu', 'SHLVL': '1', 'GIO_LAUNCHED_DESKTOP_FILE': '/usr/share/applications/geany.desktop', 'XDG_RUNTIME_DIR': '/run/user/1000', 'GTK_IM_MODULE': 'ibus', 'LC_ADDRESS': 'fr_FR.UTF-8', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'J2SDKDIR': '/usr/lib/jvm/java-8-oracle', 'S_COLORS': 'auto', 'VTE_VERSION': '5202', 'GDMSESSION': 'ubuntu', 'IM_CONFIG_PHASE': '2', 'TEXTDOMAINDIR': '/usr/share/locale/', 'GNOME_SHELL_SESSION_MODE': 'ubuntu', 'DESKTOP_SESSION': 'ubuntu', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop', 'XDG_SEAT_PATH': '/org/freedesktop/DisplayManager/Seat0', 'ANDROID_HOME': '/root/Android/Sdk', 'LESSOPEN': '| /usr/bin/lesspipe %s', 'XDG_SESSION_ID': 'c2', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', '_': '/usr/bin/python', 'GTK_MODULES': 'gail:atk-bridge', 'LC_IDENTIFICATION': 'fr_FR.UTF-8', 'DERBY_HOME': '/usr/lib/jvm/java-8-oracle/db', 'J2REDIR': '/usr/lib/jvm/java-8-oracle/jre', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'DEFAULTS_PATH': '/usr/share/gconf/ubuntu.default.path', 'XDG_SESSION_TYPE': 'x11', 'GDM_LANG': 'en_US', 'LC_TELEPHONE': 'fr_FR.UTF-8', 'LC_MONETARY': 'fr_FR.UTF-8', 'COLORTERM': 'truecolor', 'LC_NAME': 'fr_FR.UTF-8', 'XDG_MENU_PREFIX': 'gnome-', 'LC_TIME': 'fr_FR.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'GJS_DEBUG_TOPICS': 'JS ERROR;JS LOG', 'XDG_SEAT': 'seat0'}

You can use a for loop in order to have your bash environment variables printed in a better readable way:

for key, value in environ.items():
    print ("{}={}".format(key, value))

Below you can see a sample output:

LC_NUMERIC=fr_FR.UTF-8
QT4_IM_MODULE=xim
GJS_DEBUG_OUTPUT=stderr
XDG_CURRENT_DESKTOP=ubuntu:GNOME
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/lib/jvm/default-java/bin:/root/Android/Sdk/tools:/root/Android/Sdk/platform-tools
XDG_VTNR=7
DISPLAY=:0
LANG=en_US.UTF-8
TERM=xterm
SHELL=/bin/bash
LANGUAGE=en_US
XDG_SEAT=seat0

Or, you can use the pprint module:

import os 
import pprint
pprint.pprint(list(os.environ.items()))

Other articles:

How to use bash Environment Variables in Python - part 2

How to use bash Environment Variables in Python - part 3

Linux Bash shell variables

Linux Bash shell variables - Local Variables

Linux Bash shell variables - Environment Variables

How to create Linux Bash shell variables

How to remove Linux Bash shell variables