파이썬에서 환경 변수를 설정하는 방법
파이썬 스크립트에서 일부 환경 변수를 설정해야하며 환경 변수 세트를 확인하기 위해 자식 프로세스가 될 파이썬 (쉘 스크립트)에서 호출 된 다른 모든 스크립트를 원합니다. 값은 숫자입니다.
내가하면 문자열이어야 os.environ["DEBUSSY"] = 1
한다고 불평 1
합니다. 또한 일단 환경 변수를 설정하면 파이썬 (스크립트의 뒷부분)에서 환경 변수를 읽는 방법을 알고 싶습니다.
환경 변수는 문자열이어야하므로
os.environ["DEBUSSY"] = "1"
변수 DEBUSSY
를 문자열 로 설정합니다 1
.
나중에이 변수에 액세스하려면 다음을 사용하십시오.
print(os.environ["DEBUSSY"])
자식 프로세스는 부모 프로세스의 환경 변수를 자동으로 상속하므로 사용자의 특별한 조치가 필요하지 않습니다.
코드 견고성을 위해 몇 가지 추가 측면을 고려해야 할 수도 있습니다.
정수 값 변수를 환경 변수로 저장할 때 시도하십시오
os.environ['DEBUSSY'] = str(myintvariable)
그런 다음 검색하려면 오류를 피하기 위해 시도해야한다고 생각하십시오.
os.environ.get('DEBUSSY', 'Not Set')
'설정되지 않음'대신 '-1'을 대체 할 수 있음
그래서, 그 모든 것을 함께
myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))
print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)
os.environ
파이썬 사전처럼 동작하므로 모든 일반적인 사전 작업을 수행 할 수 있습니다. 다른 답변에서 언급 한 get
및 set
작업 외에도 키가 있는지 간단히 확인할 수 있습니다
파이썬 2
>>> import os
>>> os.environ.has_key('HOME') # Check an existing env. variable
True
>>> os.environ.has_key('FOO') # Check for a non existing variable
False
>>> os.environ['FOO'] = '1' # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO') # Retrieve the value
'1'
파이썬 3
파이썬 3의 경우 사전 에서 has_key 대신 in 키워드를 사용하십시오 .
>>> import os
>>> 'HOME' in os.environ # Check an existing env. variable
True
...
사용에 관해주의해야 할 중요한 사항이 있습니다 os.environ
.
자식 프로세스는 부모 프로세스에서 환경을 상속 받았지만 최근에 문제가 발생하여 파이썬 스크립트가 실행되는 동안 환경을 업데이트하는 다른 스크립트가있는 경우 os.environ
다시 호출 하면 최신 값이 반영되지 않습니다 .
문서 에서 발췌 :
이 매핑은 os 모듈을 처음 가져올 때, 일반적으로 site.py 처리의 일부로 Python 시작 중에 캡처됩니다. 이 시간 이후 변경된 환경은 os.environ을 직접 수정하여 변경 한 경우를 제외하고 os.environ에 반영되지 않습니다.
os.environ.data
모든 환경 변수를 저장하는 dict 객체는 모든 환경 값을 포함합니다.
>>> type(os.environ.data) # changed to _data since v3.2 (refer comment below)
<type 'dict'>
os.environ [ "DEBUSSY"] = 1을 수행하면 1이 문자열이어야한다고 불평합니다.
그런 다음
os.environ["DEBUSSY"] = "1"
또한 파이썬에서 환경 변수를 읽는 방법을 알고 싶습니다 (스크립트의 뒷부분에서) 일단 설정하면.
os.environ["DEBUSSY"]
에서와 같이 사용하십시오 .
some_value = os.environ["DEBUSSY"]
환경 변수에 문자열 값을 지정해야합니다.
os.environ["DEBUSSY"] = "1"
환경 변수를 읽거나 인쇄하려면 다음을 사용하십시오.
print os.environ["DEBUSSY"]
이 변경 사항은 지정된 현재 프로세스에만 적용되며 값을 영구적으로 변경하지는 않습니다. 자식 프로세스는 부모 프로세스의 환경을 자동으로 상속합니다.
무엇에 대해 os.environ["DEBUSSY"] = '1'
? 환경 변수는 항상 문자열입니다.
변수를 설정하려면 :
키를 사용한 항목 지정 방법 :
import os
os.environ['DEBUSSY'] = '1' #Environ Variable must be string not Int
존재 여부를 확인하거나
os.environ 은 인스턴스 이므로 객체 방식을 시도 할 수 있습니다.
방법 1 :
os.environ.get('DEBUSSY') # this is error free method if not will return None by default
'1'
반환 값으로 얻을 것이다
방법 2 :
os.environ['DEBUSSY'] # will throw an key error if not found!
방법 3 :
'DEBUSSY' in os.environ # will return Boolean True/False
방법 4 :
os.environ.has_key('DEBUSSY') #last 2 methods are Boolean Return so can use for conditional statements
당신이 사용할 수있는 os.environ
환경 변수에 액세스 할 사전.
이제 내가 가진 문제 os.system
는 **. bat * 파일의 SET 명령을 사용하여 환경 변수를 설정하는 배치 파일을 실행 하려고하면 실제로 파이썬 환경에 대해 설정하지는 않는다는 것입니다. os.system
함수 로 생성 된 자식 프로세스 ). 실제로 파이썬 환경에서 변수를 설정하려면이 스크립트를 사용하십시오.
import re
import system
import os
def setEnvBat(batFilePath, verbose = False):
SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE)
SetEnvFile = open(batFilePath, "r")
SetEnvText = SetEnvFile.read()
SetEnvMatchList = re.findall(SetEnvPattern, SetEnvText)
for SetEnvMatch in SetEnvMatchList:
VarName=SetEnvMatch[0]
VarValue=SetEnvMatch[1]
if verbose:
print "%s=%s"%(VarName,VarValue)
os.environ[VarName]=VarValue
환경 변수 (변수 추가 / 수정 / 제거)를 사용할 때 함수 완료시 이전 상태를 복원하는 것이 좋습니다.
환경 변수를 복원하려면 modified_environ
이 질문 에 설명 된 컨텍스트 관리자 와 같은 것이 필요할 수 있습니다 .
고전적인 사용법 :
with modified_environ(DEBUSSY="1"):
call_my_function()
환경 변수를 bash 평가로 설정하려고 하면 예상 한 것을 저장 하지 않습니다 . 예:
from os import environ
environ["JAVA_HOME"] = "$(/usr/libexec/java_home)"
이것은 쉘에서와 같이 평가하지 않으므로 /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
경로 로 얻는 대신 리터럴 표현식을 얻을 수 $(/usr/libexec/java_home)
있습니다.
다음과 같이 환경 변수를 설정하기 전에이를 평가하십시오.
from os import environ
from subprocess import Popen, PIPE
bash_variable = "$(/usr/libexec/java_home)"
capture = Popen("echo " + bash_variable, stdout=PIPE, shell=True)
std_out, std_err = capture.communicate()
return_code = capture.returncode
if return_code == 0:
evaluated_env = std_out.decode().strip()
environ["JAVA_HOME"] = evaluated_env
else:
print("Error: Unable to find environment variable " + bash_variable)
참고 URL : https://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python
'development' 카테고리의 다른 글
.gitignore에 추가 한 후 원격 저장소에서 디렉토리를 제거하십시오. (0) | 2020.02.10 |
---|---|
브라우저가 CSS 선택기를 오른쪽에서 왼쪽으로 일치시키는 이유는 무엇입니까? (0) | 2020.02.10 |
"매개 변수"vs "인수" (0) | 2020.02.10 |
파이썬에서 자식 클래스에서 부모 클래스의 메소드를 호출 하시겠습니까? (0) | 2020.02.10 |
jQuery.ajax로 멀티 파트 / 폼 데이터 보내기 (0) | 2020.02.10 |