상세 컨텐츠

본문 제목

Shell script 실행시 script 내부에서 python return 값 받기

IT : Ubuntu

by 휀스 2015. 3. 23. 16:58

본문

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 값 받기에 대한 글 이였습니다.

관련글 더보기