복붙노트

[PYTHON] bash 스크립트에서 파이썬 스크립트의 반환 값 저장

PYTHON

bash 스크립트에서 파이썬 스크립트의 반환 값 저장

bash 스크립트에서 파이썬 스크립트를 실행하고 싶습니다. 파이썬 스크립트의 출력을 변수에 저장하고 싶습니다.

내 파이썬 스크립트에서 화면에 몇 가지 물건을 인쇄하고 결국 문자열을 반환합니다 :

sys.exit(myString) 

내 bash 스크립트에서 다음을 수행했습니다.

outputString=`python myPythonScript arg1 arg2 arg3 `

그런 다음 echo $ outputString을 사용하여 outputString의 값을 검사하면 Python 스크립트가 화면에 인쇄 한 모든 것을 가져 오지만 반환 값 myString은 반환하지 않습니다!

어떻게해야합니까?

편집 : 파이썬 스크립트에 의해 만들어진 파일이 어디에 있는지 알려주므로 문자열이 필요합니다. 나는 다음과 같이하고 싶다.

fileLocation=`python myPythonScript1 arg1 arg2 arg1`
python myPythonScript2 $fileLocation

해결법

  1. ==============================

    1.sys.exit (myString)은 "이 문자열 반환"을 의미하지 않습니다. sys.exit에 문자열을 전달하면 sys.exit은 해당 문자열을 오류 메시지로 간주하고이 문자열을 stderr에 씁니다. 전체 프로그램에 대한 반환 값에 가장 가까운 개념은 종료 상태이며 정수 여야합니다.

    sys.exit (myString)은 "이 문자열 반환"을 의미하지 않습니다. sys.exit에 문자열을 전달하면 sys.exit은 해당 문자열을 오류 메시지로 간주하고이 문자열을 stderr에 씁니다. 전체 프로그램에 대한 반환 값에 가장 가까운 개념은 종료 상태이며 정수 여야합니다.

    stderr에 기록 된 출력을 캡처하려면 다음과 같이 할 수 있습니다.

    python yourscript 2> return_file
    

    bash 스크립트에서 이와 비슷한 작업을 수행 할 수 있습니다.

    output=$((your command here) 2> &1)
    

    그러나 sys.exit에 전달 된 값만 캡처하는 것은 아닙니다. stderr에 쓰여진 내용도 캡처되며 출력 로깅이나 스택 추적을 포함 할 수 있습니다.

    예:

    test.py

    print "something"
    exit('ohoh') 
    

    t.sh

    va=$(python test.py 2>&1)                                                                                                                    
    mkdir $va
    

    bash t.sh

    편집하다

    왜 그런지는 모르지만 그 경우에는 스크립트와 다른 두 개의 스크립트를 작성합니다 ... 파이썬과 bash를 혼합하는 것은 정말로 필요하지 않는 한 무의미합니다.

    import script1
    import script2
    
    if __name__ == '__main__':
        filename = script1.run(sys.args)
        script2.run(filename)
    
  2. ==============================

    2.sys.exit ()는 문자열이 아닌 정수를 반환해야합니다.

    sys.exit ()는 문자열이 아닌 정수를 반환해야합니다.

    sys.exit(1)
    

    값 1은 $?입니다.

    $ cat e.py
    import sys
    sys.exit(1)
    $ python e.py
    $ echo $?
    1
    

    편집하다:

    stderr에 쓰려면 sys.stderr을 사용하십시오.

  3. ==============================

    3.이런 식으로 sys.exit를 사용하지 마십시오. 문자열 인수로 호출하면 프로세스의 종료 코드는 1이되어 오류 조건을 알립니다. 문자열은 오류가 무엇인지 나타 내기 위해 표준 오류에 인쇄됩니다. sys.exit는 스크립트에 "반환 값"을 제공하는 데 사용되지 않습니다.

    이런 식으로 sys.exit를 사용하지 마십시오. 문자열 인수로 호출하면 프로세스의 종료 코드는 1이되어 오류 조건을 알립니다. 문자열은 오류가 무엇인지 나타 내기 위해 표준 오류에 인쇄됩니다. sys.exit는 스크립트에 "반환 값"을 제공하는 데 사용되지 않습니다.

    대신 print 문을 사용하여 표준 출력에 "반환 값"을 인쇄 한 다음 sys.exit (0)을 호출하고 셸에서 출력을 캡처해야합니다.

  4. ==============================

    4.문서에서 읽으십시오. int 또는 None 이외의 것을 반환하면 stderr에 인쇄됩니다.

    문서에서 읽으십시오. int 또는 None 이외의 것을 반환하면 stderr에 인쇄됩니다.

    stdout을 버리는 동안 stderr를 얻으려면 :

    output=$(python foo.py 2>&1 >/dev/null)
    
  5. ==============================

    5.sys.exit ([arg])에 대한 파이썬 문서 :

    sys.exit ([arg])에 대한 파이썬 문서 :

    또한 마지막 실행 된 프로그램의 반환 값을 검색하려면 $? 사전 정의 된 bash 변수.

    어쨌든 sys.exit ()에 arg로 문자열을 넣으면 프로그램 출력 끝에 별도의 줄에 출력해야하므로 약간의 구문 분석만으로 검색 할 수 있습니다. 예를 들어 다음과 같이 고려하십시오.

    outputString=`python myPythonScript arg1 arg2 arg3 | tail -0`
    
  6. ==============================

    6.Tichodroma가 말한 것에 덧붙여, 당신은이 구문을 사용하게 될 것입니다 :

    Tichodroma가 말한 것에 덧붙여, 당신은이 구문을 사용하게 될 것입니다 :

    outputString=$(python myPythonScript arg1 arg2 arg3)
    
  7. ==============================

    7.당신은 당신 자신의 질문에 대답했습니다. bash에서 Python 스크립트를 실행하고 bash 변수에 출력을 저장하려면, 파이썬 스크립트가 인쇄하는 것을 선택하십시오.

    당신은 당신 자신의 질문에 대답했습니다. bash에서 Python 스크립트를 실행하고 bash 변수에 출력을 저장하려면, 파이썬 스크립트가 인쇄하는 것을 선택하십시오.

    "자세한 정보 표시"플래그를 작성하여 파이썬 스크립트에서 bash 변수에 저장하지 않으려는 추가 텍스트를 숨길 수 있습니다. 유효한 출력을 stderr에 쓰거나 종료 코드를 무시하는 일에 관여하지 마십시오! (그것은 나쁜 아이들이하는 일입니다 ...)

    다음과 같이 시도해보십시오.

    fileLocation=`python myPythonScript1 arg1 arg2 arg1 --verbose off`
    
  8. from https://stackoverflow.com/questions/11900828/store-return-value-of-a-python-script-in-a-bash-script by cc-by-sa and MIT license