2011-05-11 9 views
308

파이썬 스크립트에서 일부 환경 변수를 설정해야하고 파이썬 (셸 스크립트)에서 호출되는 다른 모든 스크립트가 환경 변수 설정을 확인하는 하위 프로세스가됩니다. 값은 숫자입니다.파이썬에서 환경 변수를 설정하는 방법

내가 os.environ["DEBUSSY"] = 1 일 경우 1은 문자열이어야한다고 말하면서 불평합니다. 파이썬에서 환경 변수를 읽는 방법을 알고 싶습니다 (스크립트의 뒷부분에서).

답변

395

환경 변수는 문자열, 그래서 문자열 1에 변수 DEBUSSY을 설정

os.environ["DEBUSSY"] = "1" 

사용해야합니다. 나중에이 변수에 액세스하려면

하위 프로세스는 자동으로 상위 프로세스의 환경을 상속받습니다. 사용자가 별도로 조치하지 않아도됩니다.

+7

은 os.environ을 수정 실제로 현재 프로세스 또는 하위 프로세스 중 시스템 환경을 수정하지 않습니다. 자세한 정보는 다음 문서를 참조하십시오 : https://docs.python.org/2/library/os.html#os.environ – Evan

+2

@Evan 유닉스의 역사적 변종은'putenv()'를 지원하지 않을 수도 있습니다. Unixen에게는 어쨌든 할 수있는 일이 없습니다. AIX와 HPUX의 이전 버전조차도 지원 했었습니다. 오늘날 누군가 그것을 실제로 지원하지 않는 컴퓨터를 찾을 수 있다면, 나는 그 컴퓨터에서 파이썬을 돌릴 수 있을지에 대해 의문의 여지가있다. :) –

+0

**주의 : ** 환경을 변경하면 os로 시작하는 하위 프로세스가 영향을받습니다.즉, system(), popen() 또는 fork() 및 execv(). * 다른 말로하면이 방법은 프로그램 실행 방식을 수정하지 않고 프로그램의 자식 실행 방식 만 수정합니다. 사실, 프로그램은 환경 변수를 설정하고 다시 읽을 수 있지만 그 환경 변수는 자식을 위해 구성됩니다. 또한 [현재 프로세스 환경 변경] (http://stackoverflow.com/q/1178094/5025060)을 참조하십시오. 지금까지 파이썬 스크립트가 부모 환경을 수정하는 방법을 찾지 못했습니다. –

11

os.environ["DEBUSSY"] = '1'? 환경 변수는 항상 문자열입니다. 내가 os.environ [ "DEBUSSY"] = 1를 할 경우

15

, 그것은 1은 문자열이어야한다는 불평.

그런 다음 나는 또한 내가 에게로 설정하면 (스크립트의 이후 일부) 파이썬에서 환경 변수를 읽는 방법을 알고 싶어

os.environ["DEBUSSY"] = "1" 

을한다.

그냥

some_value = os.environ["DEBUSSY"] 
80

당신은 코드 견고성에 대한 몇 가지 추가적인 측면을 고려해야 할 수도 같이 os.environ["DEBUSSY"]를 사용;

당신이 환경 변수로 정수 값 변수를 저장하고

, 당신이 가능하게

os.environ.get('DEBUSSY', 'Not Set') 

대체 '를 시도해야, 오류를 방지하는 것을 고려 검색을 위해 다음

os.environ['DEBUSSY'] = str(myintvariable) 

시도 -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) 
+3

Linux 컴퓨터에서 변수를 설정하는 방법은 무엇입니까? 모든 플랫폼? –

6

os.environ 사전을 사용하여 환경 변수에 액세스 할 수 있습니다.

이제는 os.system을 사용하여 환경 변수를 설정하는 배치 파일을 실행하려고하면 (** .bat * 파일의 SET 명령을 사용하여) 사용자 환경 변수를 설정하지 않을 것입니다. python 환경 (그러나 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 
15

환경 변수에 문자열 값을 지정해야합니다.

os.environ["DEBUSSY"] = "1"

당신은 그것을 변화 없음 것, 단지 만이 할당 된 현재 프로세스에 대한 효과적 일 것

print os.environ["DEBUSSY"]

이 변경을 사용하여 읽거나 환경 변수를 인쇄하려면 가치. 하위 프로세스는 자동으로 상위 프로세스의 환경을 상속합니다.

파이썬 사전 등

enter image description here

+1

"이 변경 사항은 할당 된 현재 프로세스에만 유효하며 값을 영구적으로 변경하지 않습니다. "이것은 환경 변수 설정의 범위에 관한 질문에 대답했습니다 – spitfiredd

+0

파이썬 셸을 종료하면 이전에 설정 한 os environmet도 없어졌습니다. – MeadowMuffins

4

os.environ하게 동작하여 모든 공통 사전 작업이 수행 될 수있다. 나는 최근 문제로 실행하고 파악했다

>>> import os 
>>> os.environ.has_key('HOME') # Check an existing env. variable 
True 
>>> os.environ.has_key('FOO') # Check 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' 

당신이 환경을 업데이트하는 다른 스크립트가있는 경우 : 키가있는 경우 다른 답변에서 언급 한 getset 운영에 더하여, 우리는 간단히 확인할 수 있습니다 파이썬 스크립트가 실행되는 동안 os.environ을 다시 호출하면 의 최신 값을 반영하지 않습니다. docs에서

발췌 :이 매핑은 os 모듈을 가져올 처음 캡처

, 일반적으로 파이썬 시작하는 동안 처리 site.py.의 일환으로 이 시간 이후 변경된 환경에 대한 의 변경 사항은 os.environ을 직접 수정하여 변경된 사항을 제외하고는 os.environ에 반영되지 않습니다. 모든 환경 변수를 저장

os.environ.data는 모든 환경 값을 포함하는 딕셔너리 객체입니다 :

>>> type(os.environ.data) 
<type 'dict'> 
3

당신이 환경 변수 (변수를 제거/수정/추가), 좋은 플레이 연습은 함수 완성시 이전 상태를 복원하는 것입니다.

환경 변수를 복원하려면 컨텍스트 관리자 설명이 question에 필요합니다.

클래식 사용 : 일부 플랫폼에서

with modified_environ(DEBUSSY="1"): 
    call_my_function() 
관련 문제