2010-01-22 7 views
12

파이썬 함수 fooPy()가 일부 값을 반환합니다. (int/double 또는 string)파이썬에서 함수 반환 값을 사용하여 셸 변수에 값을 할당합니다.

이 값을 사용하여 쉘 스크립트에서 지정하려고합니다. 예를 들어 파이썬 함수는 다음과 같습니다.

def fooPy(): 
    return "some string" 
    #return 10 .. alternatively, it can be an int 

fooPy() 

쉘 스크립트에서 다음과 같은 작업을 시도했지만 아무 것도 작동하지 않았습니다.

print fooPy() 

및 쉘 스크립트 :

fooShell = python fooPy.py 
#fooShell = $(python fooPy.py) 
#fooShell = echo "$(python fooPy.py)" 

답변

32

이 같은 파이썬에서 값을 인쇄 할 수 있습니다

fooShell=$(python fooPy.py) 

하면 쉘에서 =의 주위에 공간을 남겨하지 않도록주의 스크립트.

+1

감사합니다. 나는 또한 주변에 공백을 넣음으로써 실수를 범했습니다. 그렇게 고정 시켰습니다. – cppb

+0

+1은 "쉘 스크립트에서 공백을 두지 마십시오."라고 말하면서 나와 같은 신인들을 괴롭 히며 말했습니다. 자세한 대답은 –

10

파이썬 코드에서 결과를 인쇄해야합니다.

import sys 
def fooPy(): 
    return 10 # or whatever 

if __name__ == '__main__': 
    sys.stdout.write("%s\n", fooPy()) 

그런 다음 쉘, 당신은 할 수있다 : 나는, 파이썬 코드에 if __name__ == '__main__' 검사를 추가

fooShell=$(python fooPy.py) # note no space around the '=' 

주 프로그램이에서 실행될 때 인쇄 만 수행되었는지 확인 명령 줄이 아니라 파이썬 인터프리터에서 가져올 때 사용합니다.

는 또한 :-)

  • print는 "실제 프로그램"파이썬이 파이썬 3,
  • 에서 다른 행동을 가지고 있기 때문에, 하나 어쨌든 대신 printsys.stdout.write()을 사용해야 print 대신 sys.stdout.write()를 사용
+0

+1이고 sys.stdout.write()에 대한 참고 사항은 유용합니다. 고맙습니다! – cppb

+0

Brilliant. 정확히 내가 뭘 찾고 있었는지 –

3

print의 값은 fooPy이어야합니다. 쉘 대체는 stdout에서 읽습니다. 프로그램의 마지막 줄을 print fooPy()으로 바꾼 다음 앞에서 언급 한 두 번째 셸 파이프 라인을 사용하십시오. 그것은 작동해야합니다.

5

파이썬 sys.exit 문장의 값을 원하면 쉘 특수 변수 $?에 있습니다.

$ var=$(foo.py) 
$ returnval=$? 
$ echo $var 
Some string 
$ echo returnval 
10 
+0

+1 종료 코드를 얻을 수있는 방법을 가리키고 ...하지만 하나의 작은 세부 사항을 해결하자. – fortran

+0

수정 해 주셔서 감사합니다 (여러 언어로 작업 할 때의 위험). –

+0

음 ...이 명령은 "print return_val"호출을 불필요하게 만듭니다 (아직 시도하지 않았습니다). 감사합니다. 유용한 정보입니다. +1. – cppb

관련 문제