환경변수
환경변수란 운영체제에 로그인한 사용자가 어떤 위치에서든 확인할 수 있는 값을 의미합니다.
예를 들어 A, B, C 3개의 프로그램이 실행되고 있습니다.
여기서 A, B, C 모두 한 위치에 한 파일을 저장하려고 하고 있습니다.
만약, 운영체제에 custom_path라는 이름의 환경변수 값으로 "C://temp"가 설정되어 있다면
A, B, C 세개의 프로그램 모두 이 custom_path를 참조하여 사용하면 됩니다.
또한 이후 경로가 바뀐다면 custom_path 값만 바꾸면 3개의 프로그램이 참조하는 경로도 수정할 수 있습니다.
이처럼 어떤 환경에서든 쉽게 참조할 수 있도록 설정할 수 있는 값이 환경 변수입니다.
리눅스, 윈도우 모두 존재합니다.
Python에서 환경변수 값 가져오기
리눅스에서는 아래와 같이 쉘에서 환경변수를 설정할 수 있습니다.
$ export custom_path=/tmp
$ echo $custom_path
이후 Python 코드에서도 스크립트가 실행 중에 OS에서 설정한 환경 변수를 가져올 수 있습니다.
다만, 위의 명령어로 환경변수를 설정하였다면 현재 터미널에서 실행되는 python 스크립트에서만 환경 변수 참조가 가능합니다.
만약 이 터미널 뿐만 아니라 "wonseok"이라는 사용자가 사용하는 터미널에서 모두 참조가 가능한 환경변수를 설정하기 위해서는 아래와 같이 설정합니다.
". bashrc" 파일의 제일 마지막에 환경변수를 설정합니다.
파일 수정후 수정된 내용을 적용하기 위해 "source" 명령을 사용합니다.
$ vim ~/.bashrc
...
export custom_path=/tmp
저장후 아래 명령 수행
$ source ~/.bashrc
위와 같이 수행한 후 "ctrl+t" 명령으로 새로운 터미널을 열고 환경변수 값을 출력해봅니다.
어떤 터미널에서도 "wonseok" 계정으론 해당 환경변수 값을 참조할 수 있습니다.
또한 사용자가 실행하는 Python 스크립트에선 모두 환경변수 참조가 가능합니다.
자 이제 Python os모듈에서 제공하는 envrion 필드를 사용하여 환경변수 값을 출력해보겠습니다.
Python os.envrion
아래의 파이썬 스크립트를 작성합니다.
import os
custom_path = os.environ.get('custom_path', '')
print(custom_path)
이후 실행시 다음과 같은 결과가 출력됩니다.
위에서 설정한 "custom_path" 환경 변수의 값이 정확히 출력됩니다.
위와 같이 리눅스 쉘에서 설정한 환경변수의 값이 그대로 출력되고 있습니다.
자 이제 환경변수 값을 수정한 후 다시 Python 스크립트를 실행해보겠습니다.
$ vim ~/.bashrc
...
export custom_path=/tmp/aaaa
$ source ~/.bashrc
$ python3 test.py
역시 수정한 환경변수 값 "/tmp/aaaa"가 정확히 출력되고 있습니다.
이처럼 언제 어디서든지 참조할 값을 사용하기 위해선 환경 변수를 사용할 수 있습니다.
그렇다면 예제를 응용한 Python 스크립트를 작성해보겠습니다
환경 변수 경로에 파일 생성 스크립트(create.py)
사전 작업 폴더 생성
$ mkdir /tmp/aaaa
create.py 스크립트 작성
import os
custom_path = os.environ.get('custom_path', '')
file_path = '%s/%s' % (custom_path, 'hello.txt')
with open(file_path, "w") as f:
f.write("hello world!")
실행 및 결과 확인
$ python3 create.py
ls -al /tmp/aaaa
cat /tmp/aaaa/hello.txt
위와 같이 환경변수 값이 가리키는 폴더에 "hello.txt" 파일을 생성하여 문자열을 저장하였습니다.
다음은 환경변수 값이 가리키는 폴더의 파일을 삭제하는 예제를 보겠습니다.
환경 변수 경로 파일 삭제 스크립트(remove.py)
remove.py 스크립트 작성
import os
custom_path = os.environ.get('custom_path', '')
file_path = '%s/%s' % (custom_path, 'hello.txt')
os.remove(file_path)
실행 및 결과 확인
$ python3 remove.py
$ ls -al /tmp/aaaa
위와 같이 "/tmp/aaaa/hello.txt" 파일이 삭제된 것을 알 수 있었습니다.
결과 요약
우선 craete.py 스크립트를 실행한 후 환경 변수 경로의 파일을 확인합니다.
아래와 같이 'hellot.xt' 파일이 생성되었으며 내용도 정상적으로 저장되었습니다.
다시 remove.py 스크립트를 실행합니다.
아래와 같이 'hellot.xt' 파일이 삭제되었습니다.
이 처럼 하나의 환경 변수를 통해 여러가지의 스크립트들이 같은 값을 참조하여 공동 작업을 수행할 수 있습니다.
Python 뿐만 아니라 Java, C 등에서도 환경변수를 참조하여 프로그래밍이 가능합니다.
여러분 수행해야할 반복적인 작업을 단순화시켜주어 유지보수 효율을 높입니다.