2017-04-20 3 views
1

$ 고양이 test.pyPython과 Bash 명령 줄 env vars가 다르게 처리 되었습니까?

#!/usr/bin/env python 
# coding=utf-8 
import os 
print (os.environ.get('test')) 

$ 테스트 = 4 파이썬 test.py

4 

$ 테스트 = 4; 파이썬 test.py

None 

쉘에서 내가 파이썬과 다른 가지고 있지만 :

$ 테스트 = 4; 에코 $ 테스트

4 

그러나 :

$ 테스트 = 2
$ 테스트 = 4 에코 $ 테스트

2 

그래서 나는 파이썬과 bash는이 상황을 처리하는 방법에 대한 혼란 스러워요. 누군가 설명 할 수 있습니까?

답변

2

:

$ export test=4 

그런 다음 파이썬 스크립트를 실행합니다. 스크립트 내부의 변수 test를 얻을 수 있도록 여기에

,

test=4 python test.py 

python의 환경에 test=4 전달합니다.

test=4; python test.py 

반면 즉 환경에 전파되지 않습니다 만 현재 쉘 세션에서 사용할 수있는 쉘 변수를 (당신이 잘 쉘에서 값을 받고 그 이유입니다)을 작성합니다.

export test=4; python test.py 

: 프로세스 '환경 변수를 사용할 수 있도록 모든 서브 프로세스, 즉 변수를 상속하도록

변수 환경 변수를 만들려면 모든 POSIX 쉘에서 일반적인 방법으로는 export에 변수 마지막 경우 :

$ test=2 
$ test=4 echo $test 
2 

echo 부이 전에 일어나는 변수 test의 확장 ltin이 실행됩니다.

당신은 나중에 확장을 보존하기 위해 어떤 방법을 사용해야합니다

$ test=2 
$ test=4 sh -c 'echo $test' 
4 
+0

마지막 사례는 어때요? – jiamo

+0

@jiamo 내 편집을 확인하십시오 ... – heemayl

+0

"에코 빌트인이 실행되기 전에 일어나는 일"을 이해할 수 있습니다. . 왜 python이 명령의 env에 var를 넘기는 것을 좋아하지 않습니다. 'sh -c'는 파이썬과 같은 새로운 쉘을 여는 것처럼 보입니다. 그래서 파싱 단계. 그것은 아가씨였습니다. – jiamo

1

파이썬 변수를 내 보내야합니다. 쉘 환경 변수의 차이 그게 전부

$ ./test.py 
+0

'export test = 4; python test.py' works – jiamo

+0

'test = 2;로'2'를 얻는 이유를 모르겠습니다. 시험 = 4; echo $ test', 반드시'4'이어야합니다. –

+0

질문이 달라집니다. 쓰기를 놓친다. – jiamo

1

이를 ...

test=4 python test.py 

test ...는 변수가 명시 적 반면 ...

test=4; python test.py 

...는 두 개의 별도의 명령이며, 그 환경에서 집합 단일 python 명령이다. 첫 번째 명령은 현재 셸에서 변수 test (내보내기 용으로 표시하지 않음)을 설정하고 두 번째 명령은 python 명령입니다. 당연히 파이썬은 환경 변수를 볼 수 없습니다. 당신이 나중에

echo $test 

을 할 경우 명령 줄을 처리하지만 다음 (안 echo command)는 그 값으로 변수 참조를 확장합니다. 결과로 확장 된 명령은

echo 4 

입니다. 이는 예상했던대로 수행됩니다.

관련 문제