development

파이썬에서 환경 변수를 설정하는 방법

big-blog 2020. 2. 10. 22:16
반응형

파이썬에서 환경 변수를 설정하는 방법


파이썬 스크립트에서 일부 환경 변수를 설정해야하며 환경 변수 세트를 확인하기 위해 자식 프로세스가 될 파이썬 (쉘 스크립트)에서 호출 된 다른 모든 스크립트를 원합니다. 값은 숫자입니다.

내가하면 문자열이어야 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파이썬 사전처럼 동작하므로 모든 일반적인 사전 작업을 수행 할 수 있습니다. 다른 답변에서 언급 한 getset작업 외에도 키가 있는지 간단히 확인할 수 있습니다

파이썬 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



반응형