2016-06-23 6 views
0

私はos.execvp()関数をPythonで使用しています。私はこの機能の結果を得ることができません。python 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))