os
모듈의 environ
을 통해
python은 환경변수를 일종의 dictionary (dict
)로 관리함.
환경변수 얻어오기
dict
형의 경우처럼 key를 통한 직접 접근 key에 해당하는 환경변수가 없을 경우 KeyError
가 발생하므로,
os.environ
의 get()
메서드를 사용하여 접근하는게 낫다.
- 다른 방법은
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
참고
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
읽어보면 좋은 자료들
https://ko.from-locals.com/python-os-getenv/
2023.06.20 - [개발환경] - [Env] Environment Variable (환경변수)
'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 |