2011-12-19 5 views
11

쉘 스크립트에서 파이썬 함수를 호출하는 방법을 알아 내려고하고 있습니다.쉘 스크립트에서 파이썬 함수 호출하기

필자는 여러 함수가있는 파이썬 파일을 가지고 있으며 쉘 스크립트에서 반환 된 값을 사용해야합니다. 그것을 할 수있는 방법이 있습니까?

필자는 Python을 사용하여 설정 파일을 읽고 쉘에서 값을 가져 오기 위해이 작업을 수행하고 있습니다. 이것을 달성하는 다른 더 좋은 방법이 있습니까?

test.py에는 다음이 포함 나는 쉘 변수에 파이썬 함수에 의해 반환 된 값을 저장해야

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read("test.conf") 

def get_foo(): 
    return config.get("locations", "foo") 

def get_bar(): 
    return config.get("locations", "bar") 

.

+3

해결하려는 더 큰 문제는 무엇입니까? 왜 설정과 스크립트를 사용하지 않는 쉘 스크립트의 일을합니까? 또는 쉘에서 설정을 읽지 않는 이유는 무엇입니까? 나는이 문제를 두 파일로 나누기에 충분히 복잡한 것으로 생각한다. –

답변

22

당신은 결과를 인쇄 할 수 파이썬 인터프리터를 요청하여 표준 출력으로 당신의 기능의 결과를 보낼 수 있습니다

python -c 'import test; print test.get_foo()' 

-c 옵션은 단순히 파이썬은 어떤 파이썬 명령을 실행하도록 요청합니다. 역 따옴표 때문에 동등하게

RESULT_FOO=`python -c 'import test; print test.get_foo()'` 

또는

RESULT=$(python -c 'import test; print test.get_foo()') 

$(…)는 명령을 평가하고 그 출력에 의해 대체 : 변수에 결과를 저장하기 위해

, 당신은 때문에 할 수 있습니다.

PS : 각 기능의 결과를 얻으려면이 방법을 사용할 때마다 구성 파일을 구문 분석해야합니다. 이것은 같은과, 한 번에 모든 결과를 반환하여 최적화 할 수 있습니다 : 결과는 다음 분할과 결과를 소요

RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2) 

와 다른 변수에 넣을 수

ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()') 

예를 들어 RESULT_BAR에 넣습니다 (결과도 #n의 경우 마찬가지로 -fn).

PPS : 파블로 Maurin가 언급 한 바와 같이, 아마, 가능하다면, 대신 하나 개의 프로그램에서 변수를 계산하고 다른 그들을 사용하는 하나의 통역에 모든 일을하는 것이 더 쉬울 수 (파이썬,하지만 어쩌면 또한 쉘) 것 하나.

+0

또는 다른 python 스크립트로 출력을 보내고 실행 해보십시오. – sum2000

+0

는 좋아 보인다. .. 그것은 일했다. .. 나는 이상하게 여겼다. 이 경우 .. config 파일에서 n 매개 변수를 읽으려면 위의 줄을 셸에서 n 번 호출하면 configparser를 사용하여 파이썬에서 여러 번 읽을 수 있습니다. 내가 할 수있는 다른 방법이 더 좋은가? –

+1

@saddy : 예를 들어 두 결과를 함께 인쇄 한 다음 유닉스 유틸리티를 사용하여 분리 할 수 ​​있습니다 :'RESULT = $ (import test; print test.get_foo(), test.get_bar())','cut ','sed' (?), 또는'awk' (?) 결과의 각 부분을 차례로 추출합니다.'RESULT2 = $ (echo $ RESULT | cut -d '-f 2)'get_bar()'등을 제공합니다. – EOL

관련 문제