2016-06-23 1 views
0

파이썬에서 os.execvp() 함수를 사용하고 있습니다. 나는이 기능의 결과를 얻을 수 없다.파이썬 2.7에서 os.execvp()의 결과를 얻는 방법은 무엇입니까?

try: 
    msi_install_cmd = ['msiexec.exe', '/quiet', '/i ', msi_path.encode('mbcs')] 
    os.execvp(msi_install_cmd[0], msi_install_cmd)   

except Exception, error: 
    raise Exception("MSI installed failed") 

문제 os.execvp()에서 반환 코드 또는 예외를 얻을 수 없습니다.

+1

어떻게 일이 발생할 것으로 예상되는? ['execvp()'] (https://docs.python.org/2/library/os.html#os.execvp)는 현재 프로세스를 실행 된 프로세스로 대체합니다. 모든 것이 제대로 작동하면 기능이 의도적으로 반환되지 않습니다. ['subprocess.call()'] (https://docs.python.org/2/library/subprocess.html#subprocess.call) 또는 그와 비슷한 것을 대신 사용 하시겠습니까? – dhke

+0

감사합니다. dhke. 리턴 코드를 얻을 수있는 곳이면 어디에서 사용할 수 있습니까? –

+0

편집을 참조하십시오. 'check_call()'이 유용 할 수 있습니다 ('call()'은 실패시 예외를 발생시키지 않습니다). – dhke

답변

0

os.exec*() 친구는 설계 상 돌아 오지 않습니다. exec()은 현재 프로세스를 호출 된 프로세스로 대체합니다. exec()을 "여기에서 내 프로그램을 중지하고이 프로그램을 계속 사용 하시겠습니까?"으로 호출하는 것이 좋습니다.

당신이 (자식) 과정에서 리턴 코드를하려면 subprocess 모듈이 더 나은 일치 :

try: 
    msi_install_cmd = ['msiexec.exe', '/quiet', '/i ', msi_path.encode('mbcs')] 
    subprocess.check_call(msi_install_cmd) 

except Exception as error: 
    raise Exception("MSI installed failed: {}".format(error.message)) 
관련 문제