"FOO"
파이썬에서 변수가 있는지 환경을 확인하고 싶습니다 . 이를 위해 os
표준 라이브러리를 사용하고 있습니다. 도서관 문서를 읽은 후 목표를 달성하는 두 가지 방법을 알아 냈습니다.
방법 1 :
if "FOO" in os.environ:
pass
방법 2 :
if os.getenv("FOO") is not None:
pass
어느 방법이 좋은 / 바람직한 조건인지, 왜 그런지 알고 싶습니다.
답변
첫 번째를 사용하십시오. 에 무언가 정의되어 있는지 직접 확인하려고 시도합니다 environ
. 두 번째 형식은 똑같이 잘 작동하지만 의미가 없으면 값이 다시 있고 비교를 위해서만 사용하기 때문에 의미가 부족합니다 .
당신은 무언가가 존재하는지 확인하기 위해 노력하고 있는 environ
이유는 것, 수 를 비교하는 단지 다음 그것을 멀리 던져 ?
그것이 정확히 무엇입니까 getenv
:
환경 변수 를 가져오고
None
존재하지 않는 경우 반환 하십시오. 선택적 두 번째 인수는 대체 기본값을 지정할 수 있습니다.
(이것은 또한 수표가 그냥 될 수 있음을 의미합니다 if getenv("FOO")
)
당신은 그것을 얻고 싶지 않고 , 그것이 존재하는지 확인하고 싶습니다.
어느 쪽이든, getenv
랩퍼 일뿐 environ.get
이지만 다음과 같은 매핑에서 멤버십을 확인하는 사람들을 보지 못합니다.
from os import environ
if environ.get('Foo') is not None:
요약하면 다음을 사용하십시오.
if "FOO" in os.environ:
pass
당신이 경우에 단지 사용하면서, 존재를 확인하려는 getenv("FOO")
당신이 실제로 당신이 얻을 수있는 값으로 뭔가를하려는 경우.
답변
환경 변수의 존재에 조건부로 수행하려는 작업에 따라 두 솔루션 중 하나의 경우가 있습니다.
사례 1
값을 고려하지 않고 환경 변수의 존재에 따라 순수하게 다른 조치를 취하려면 첫 번째 솔루션이 가장 좋습니다. 환경 변수 목록에서 ‘FOO’는 다음과 같이 테스트 대상을 간결하게 설명합니다.
if 'KITTEN_ALLERGY' in os.environ:
buy_puppy()
else:
buy_kitten()
사례 2
환경 변수에 값이 정의되어 있지 않은 경우 기본값을 설정하려면 두 번째 솔루션은 실제로 작성한 형식이 아니지만 유용합니다.
server = os.getenv('MY_CAT_STREAMS', 'youtube.com')
또는 아마도
server = os.environ.get('MY_CAT_STREAMS', 'youtube.com')
응용 프로그램에 여러 옵션이있는 경우 ChainMap
키를 기반으로 여러 dicts를 병합 할 수있는 을 살펴보십시오 . ChainMap
설명서 에 이에 대한 예가 있습니다.
[...]
combined = ChainMap(command_line_args, os.environ, defaults)
답변
안전한 측면 사용
os.getenv('FOO') or 'bar'
위의 답변이있는 코너 케이스는 환경 변수가 설정되었지만 비어있는 경우입니다.
이 특별한 경우에는
print(os.getenv('FOO', 'bar'))
# prints new line - though you expected `bar`
또는
if "FOO" in os.environ:
print("FOO is here")
# prints FOO is here - however its not
이것을 피하려면 그냥 사용하십시오 or
os.getenv('FOO') or 'bar'
그럼 당신은 얻을
print(os.getenv('FOO') or 'bar')
# bar
빈 환경 변수는 언제입니까?
.env
파일 에서 값을 설정하는 것을 잊었습니다
# .env
FOO=
또는
$ export FOO=
또는 그것을 설정하는 것을 잊었다 settings.py
# settings.py
os.environ['FOO'] = ''
업데이트 : 확실하지 않은 경우이 원 라이너를 확인하십시오
>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
답변
여러 env 변수가 설정되어 있지 않은지 확인하려면 다음을 수행하십시오.
import os
MANDATORY_ENV_VARS = ["FOO", "BAR"]
for var in MANDATORY_ENV_VARS:
if var not in os.environ:
raise EnvironmentError("Failed because {} is not set.".format(var))
답변
내 의견은 제공된 태그와 관련이 없을 수 있습니다. 그러나 검색에서이 페이지로 연결되었습니다. 나는 R에서 비슷한 검사를 찾고 있었고 @hugovdbeg post의 도움으로 다음을 생각해 냈습니다. R에서 비슷한 솔루션을 찾고있는 사람에게 도움이되기를 바랍니다.
'USERNAME' %in% names(Sys.getenv())