-1

コマンド 1 を popen(python) で処理し、最初のコマンドが終了したら別のコマンド 2 を実行したいと考えています。wait() を使用して機能させると、機能しませんでした.なぜですか? 誰でも私を助けることができますか?

def ant_debug():
    ant_debug_cmd = 'cmd /k ant debug'
    os.system(ant_debug_cmd)

def adb_install():
    apk_debug_path = walk_dir('.\\bin')
    adb_install_cmd = 'cmd /k adb install -r ' + apk_debug_path
    os.system(adb_install_cmd)

child = subprocess.call(ant_debug())
if child.wait() == 0:
    adb_install()
4

2 に答える 2

1

コードにはいくつかの問題があり、実行されないのは当然です。

.wait()ご利用の際はお電話いただく必要はございませんsubprocess.call()。この関数がProcess.wait()呼び出しを処理します

代わりにsubprocess.call()、終了コードを直接返します。subprocess.call()ドキュメントの引用:

argsで記述されたコマンドを実行します。コマンドが完了するのを待ってから、returncode 属性を返します。

鉱山を強調します。

さらに、ant_debug()関数は何も返しません (実行するコマンドは言うまでもありません)。代わりに、!antを使用してコマンドを実行します。その呼び出しをまとめてos.system()削除します。の代わりに使用します。subprocess.call() os.system()

使用するコードを書き直すと、次のように subprocess.call()なります。

retcode = subprocess.call(['ant', 'debug'])

if retcode == 0:
    apk_debug_path = walk_dir('.\\bin')
    adb_install_cmd = ['adb', 'install', '-r', apk_debug_path]
    subprocess.call(adb_install_cmd)

ここで、実行するコマンドとその引数を文字列のリストとして渡します。

cmd /kプレフィックスを削除しました。ant 直接実行するだけです。ここではシェルは必要ありません。/kスイッチは、シェルが閉じるのを防ぎます。cmdの戻り値は、返さcmdれたものと必ずしも同じではありませんant

于 2013-09-28T16:30:24.733 に答える
0

subprocess.call に関する Martijn のコメントに加えて、" cmd /k" は、コマンドを実行してから続行することを意味するため、cmd に終了を指示するまで、これは終了しません。最初に cmd を使用して ant コマンドを実行する必要はおそらくないので、呼び出しリストから最初の 2 つの項目を削除するだけです。cmd などのシェルを介してコマンドを実行する場合は、引数を渡すことができますshell=True(ただし、リスクがある理由を最初に理解してください)。

于 2013-09-28T16:51:10.870 に答える