shell script 를 사용하다보면 python 파일을 실행해서 그 return 값을 사용해야 할 경우가 종종 생기게 됩니다.
그런데 일반적인 python return 을 사용해서는 shell 에서 그 값을 정상적으로 사용할 수 없습니다.
import sys
import os
def main () :
if (1 == 1) :
print "test"
PRINT = "print"
output = os.popen("echo "+PRINT)
os.system("echo \"asdf\"")
return "istring return"
sys.exit(8)
else :
print "test2"
return "jstina return"
sys.exit(8)
if __name__ == "__main__":
print main()
위와 같은 내용으 test.py 파일이 있을 경우
ret=`python test.py`
echo $ret
의 결과는
asdf test istring return
asdf test istring return
입니다. 이렇게 해서는 원하는 값인 istring return 을 사용할 수 없습니다.
이를 수정하여 원하는 값만 받기 위해서는 마지막 return 값을 받는 부분에 \r 을 추가하여 주면 됩니다.
import sys
import os
def main () :
if (1 == 1) :
print "test"
PRINT = "print"
output = os.popen("echo "+PRINT)
os.system("echo \"asdf\"")
return "\ristring return"
sys.exit(8)
else :
print "test2"
return "\rjstina return"
sys.exit(8)
if __name__ == "__main__":
print main()
이 코드의 실행 결과는?
$ ret=`python test.py`
$ echo $ret
istring return
정확하게 원하는 값인 istring return 값을 얻을 수 있게 되었습니다.
이렇게 하지 않을 경우 shell script 에서 실행시키는 python 문구 내에서 절대 os.system("echo xxxx") 와 같은 명령을 사용하지 않는 방법도 있습니다.
하지만 python 의 output 과 shell script 의 output sync 를 맞추기 위해서는 python 내부에서 os.system 을 사용할 수 밖에 없어 어쩔 수 없는 선택이라 이렇게 꼼수를 찾아보았던 것 입니다.
이상 Shell script 실행시 script 내부에서 python return 값 받기에 대한 글 이였습니다.
크롬 브라우저 (Chrome browser) 에서 안드로이드 앱(android app) 실행하는 방법 (0) | 2015.04.15 |
---|---|
find 명령으로 특정 날자 시간 이후 수정 또는 생성 된 파일 찾기 date find (0) | 2015.03.28 |
samba folder 공유를 위해 /etc/fstab 수정 후 바로 mount 하는 방법 (0) | 2015.03.20 |
여러 terminal 의 shell history 모두 저장하기 (0) | 2015.03.19 |
크롬 메모리 사용량 줄이기 (Chrome memory 줄이기) (0) | 2015.02.10 |