본문 바로가기
Python

[Python] 환경변수 접근하기

by ds31x 2023. 9. 30.

os 모듈의 environ 을 통해

python은 환경변수를 일종의 dictionary (dict)로 관리함.


환경변수 얻어오기

dict 형의 경우처럼 key를 통한 직접 접근 key에 해당하는 환경변수가 없을 경우 KeyError 가 발생하므로,

os.environget() 메서드를 사용하여 접근하는게 낫다.

  • 다른 방법은 os.getenv() 함수를 통한 접근도 가능하다.
  • 이는 os.environ.get()메서드와 마찬가지로 key에 해당하는 환경변수가 없는 경우 KeyError을 발생시키지 않고 기본값을 반환한다.

dict와 마찬가지로 keys()values()를 제공함.

다음 예제 코드를 보면 현재 환경변수를 python에서 얻어오는 방법을 보여준다.

 import os

 for c in os.environ.keys():
     print(c)
 print('===============')
 print(os.environ.get('PWD', "Not Defined")) #os.environ['PWD']

환경변수 설정

dict새로운 key-value 의 item을 추가하거나 기존의 key의 값을 바꾸는 방식 그대로 환경변수를 덮어쓰거나 설정할 수 있음.

  • 단, OS의 환경변수가 다시 작성되는 것이 아니며,
  • 해당 python이 동작하고 있는 프로세스해당 프로세스에서 생성되는 subprocess들에게만 의미가 있음.

dict 에서 item을 제거하는 방식이 os.environ 에도 그대로 적용되지만 이 역시 해당 python이 동작하고 있는 프로세스와 해당 프로세스에서 생성되는 하위프로세스 (subprocess 등)에서만 의미가 있음.

  import os
  import subprocess

  print(subprocess.check_output('date', encoding='utf-8'))
  print(subprocess.check_output('echo $LANG', shell=True,  encoding='utf-8'))

  print('==================')
  os.environ['LANG']='ko_KR.UTF-8'
  print(subprocess.check_output('date', encoding='utf-8'))
  print(subprocess.check_output('echo $LANG', shell=True,  encoding='utf-8'))
  • 위의 예제는 linux의 LANG이라는 환경변수를 변경하고,
  • 이후 subprocess로 날짜를 확인하는 date를 수행하여 환경변수가 바뀐 것이 적용되는지를 확인하는 예제임.
  • date 라는 프로그램이 없을시 동작하지 않음

결과는 다음과 같음.

> python test.py
Sat Sep 30 12:46:31 UTC 2023

C.UTF-8

==================
2023. 09. 30. (토 ) 12:46:31 UTC

ko_KR.UTF-8
  • os 모듈을 통한 환경변수 설정 변경은 해당 python이 동작하고 있는 프로세스와 그 하위 프로세스에서만 의미가 있다.
  • 운영체제(OS- 자체의 환경변수를 편집하는게 아님을 주의할 것.

위의 LANG 환경변수 변경 예제를 제대로 확인하기 위해서는 ubuntu의 locale 설정이 필요함.

2023.10.01 - [Linux] - [Linux] 한글 처리 : Ubuntu

 

[Linux] 한글 처리 : Ubuntu

Ubuntu에서 한글 및 우리나라에서 사용하는 기호 및 정렬 순서를 사용하려면 locale을 설정해야한다. locale 이란 여러 언어들 중에서 선택하여 사용자들이 자신의 언어, 국가, 문자, 정렬순서 등을

ds31x.tistory.com

 


참고

os.getenv()함수처럼, os.putenv(), os.unsetenv() 등이 지원되나,

기존의 os.envrion를 update하는 것이 아니기 때문에

가급적 os.environ 에서 dict처럼 직접 추가하거나 pop 혹은 del 로 제거하는 게 낫다 (메모리 누수가 발생할 수 있음).

 

이에 대한 자세한 내용은 다음 URL을 참고할 것.

https://docs.python.org/3/library/os.html#os.putenv

 

os — Miscellaneous operating system interfaces

Source code: Lib/os.py This module provides a portable way of using operating system dependent functionality. If you just want to read or write a file see open(), if you want to manipulate paths, s...

docs.python.org


읽어보면 좋은 자료들

https://ko.from-locals.com/python-os-getenv/

 

Python(os.environ)에서 환경 변수 가져오기, 추가, 덮어쓰기 및 삭제

환경 변수는 os.environ을 사용하여 Python 프로그램에서 검색, 확인, 설정(추가 또는 덮어쓰기) 및 삭제할 수 있습니다. 환경 변수를 설정하거나 삭제하여 변경한 사항은 Python 프로그램 내에서만 유

ko.from-locals.com

2023.06.20 - [개발환경] - [Env] Environment Variable (환경변수)

 

[Env] Environment Variable (환경변수)

정의 Environment variable (환경변수) 란, OS나 SW에서 참조하는 변수들로 OS나 SW가 동작 (or 실행)에 영향을 주는 값을 가짐. shell script 나 software들이 각 장비의 환경에 맞게 동작할 수 있도록 해 줌. 종

ds31x.tistory.com

 

'Python' 카테고리의 다른 글

[Python] Example: input, sys.argv and argparse  (0) 2023.10.10
[Python] tuple  (0) 2023.10.06
[Colab] colab에서 ipynb 공유하기  (0) 2023.09.26
[Python] sys 모듈  (0) 2023.09.25
[Pandas] Index 지정 관련 메서드 : reset_index, set_index  (0) 2023.09.20