2017-09-25 4 views
-1

종료 코드 3 또는 1을 제외한 0이 아닌 값을 메인에서 얻으려면 어떻게해야합니까? 하나의 프로그램을 실행하려고하지만 실행시 3 대신 종료 코드 1을 얻습니다. 종료 코드 3을 얻고 싶다면 어떻게해야합니까? 예 :다른 출구 코드를 기본 언어 인 2 또는 3과 같이 어떻게 가져 가나 요?

from subprocess import Popen, PIPE 

def console(cmd): 
    p = Popen(cmd, shell=True, stdout=PIPE) 
    out, err = p.communicate() 
    return (p.returncode, out, err) 

if __name__ == '__main__': 
    result = console('go build test.go') 
    result = console('./test') 
    result = console('echo $?') 
    print 'returncode: %s' % result[0] 
    print 'output: %s' % result[1] 
    print 'error: %s' % result[2] 

내가가 더 사용할 수있는 파이썬 프로그램의 종료 상태 코드를 기록 할 :

내가 파이썬 스크립트를 통해 스크립트를 이동 실행하려는
package main 
import "os" 
func main() { 

    // Exit with status code. 
    os.Exit(3) 
} 

아래 파이썬 스크립트를 찾아주세요 다른 논리.

+2

당신이 이동에서 명령을 실행하는 줄 것이다

from subprocess import Popen, PIPE def console(cmd): p = Popen(cmd, shell=True, stdout=PIPE) out, err = p.communicate() return (p.returncode, out, err) if __name__ == '__main__': result = console('./test') print result 

로 변경 될 수 있으며, 해당 응용 프로그램의 종료 코드를 원하는? 또는 예를 들어 명령을 실행합니다. 쉘에서 어떤 코드가 있는지보고 싶습니까? – icza

+3

무언가를 시도했지만 작동하지 않는 경우 수행 한 작업과 실패한 방법을 자세하게 게시하십시오. 이 경우 프로그램을 실행하려고했지만 올바른 종료 코드를 얻지 못했다고합니다. 그 때 당신을 도울 것이 매우 쉬울 것입니다 1. 당신이 당신의 코드를 어떻게 달렸는지 배치하십시오. 2. 프로그램을 실행 한 후에 종료 코드를 얻으려고 시도한 방법을 게시했습니다. – nos

+0

당신은'go 빌드 '를 사용하고 있습니다. 이렇게하면 바이너리가 컴파일되고 실행되지 않습니다. 'go run'을 사용하십시오. 또한 보통 파이썬의 하위 프로세스에서'shell = True'를 사용하고 싶지 않습니다. 완전히 불필요하며 보안 문제까지 열어 줄 수 있습니다. – Carpetsmoker

답변

2

go run을 사용하고 있습니다. 이 경우 실행 파일이 bash에서 실행되고 있지 않으므로 종료 상태를 사용할 수 없습니다. run은 하위 프로세스에서 실행 중입니다. 차이가 build를 사용하고이를 실행

$ go build test.go 
$ ./test 
$ echo $? 
3 

편집

당신은 파이썬 프로그램을 사용하는 경우를 확인하려면, 당신은 echo $?를 실행할 필요가 없습니다. 이 명령은 ./test 명령을 실행 한 셸과 다른 셸에서 실행되기 때문에 잘못된 대답을 제공합니다.

언제든지 Popen.returncode에서 명령의 종료 상태를 읽을 수 있습니다. 이 스크립트는이

$ python test.py 
(3, '', None) 
+0

종료 코드를 실행하고 기록하는 데 사용할 샘플 파이썬 코드를 추가했습니다. – Dhanshree

+0

@Dhanshree 파이썬 예제를 제공하는 편집을 추가했습니다. 희망이 도움이된다. – nu11p01n73R