2012-07-09 4 views
2

bash 스크립트 내에서 사용하기 위해 파이썬 모듈에서 문자열을 반환합니다.bash : 문자열 보간

SCRIPT_DIR=/somepath/to/scripts/folder 
cd $SCRIPT_DIR/eod 

python_cmd='import sys; 
      sys.path.append("/somepath/to/scripts/folder/utils"); 
      import settings as st; 
      print " ".join(st.foo())' 

# Fix indentation for Python 
python_cmd=${python_cmd//'   '/''} 

my_array=(`python -c "$python_cmd"`) 

내가 위의 코드에서 건조 철학을 사용하려면 :

이것은 내가 지금까지있는 것입니다. 그러나 문자열 /somepath/to/scripts/folder은 스크립트에서 반복됩니다. 내가 잘못 뭐하는 거지

Traceback (most recent call last): 
    File "<string>", line 3, in <module> 
ImportError: No module named settings 

: 그러나 나는 (시도 $ SCRIPT_DIR/유틸로 python_cmd에 경로 문자열을 교체하고 다음과 같은 오류와 함께 실패 - 나는 python_cmd에 $ SCRIPT_DIR의 정의를 통과 하시겠습니까?

참고 :

나는 떠들썩한 파티를 4.1.5

답변

3

대신 파이썬 텍스트 sys.path를 수정하는 모든 문자열을 전달하는 귀찮게하지 마, MODI를 실행하고 있습니다. bash 스크립트에서 PYTHONPATH 환경 변수를 사용하십시오. 어쨌든 가져 오기 경로에 영향을주는 것이 더 쉽고 선호되는 방법입니다.

경로를 설정하는 방법의 예 :

SCRIPT_DIR=/somepath/to/scripts/folder 
cd $SCRIPT_DIR/eod 

export PYTHONPATH=$SCRIPT_DIR 
python_cmd='import settings as st; 
      print " ".join(st.foo())' 

나는 또한 말을이 함께 구성 요소를 접착제하는 이상한 방법처럼 보인다,하지만 난 더 좋은 방법을 추천 할 수있는 충분한 정보가 없습니다 .

+0

죄송합니다. 하지만'PYTHONPATH'를 대신 사용할 수있는 몇 줄을 게시 할 수 있습니까? - 감사. –

+0

이 예제로 업데이트되었습니다. –

+0

니스. Ta 대단히! :) –

2

python 명령이 작은 따옴표로 묶여 있기 때문에 $SCRIPT_DIR은 확장되지 않습니다. 이것을 시도하십시오 :

python_cmd='import sys; 
      sys.path.append("'$SCRIPT_DIR'"); 
      import settings as st; 
      print " ".join(st.foo())' 

그렇다면 나는 PYTHONPATH을 수정하는 대답으로 갈 것입니다.