Python 如何强制wait()完全等待子流程?wait()不能工作

Python 如何强制wait()完全等待子流程?wait()不能工作,python,python-3.x,subprocess,wait,popen,Python,Python 3.x,Subprocess,Wait,Popen,我想用popen(python)处理command1,然后在第一个command2完成后运行另一个command2。当我使用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_instal

我想用popen(python)处理command1,然后在第一个command2完成后运行另一个command2。当我使用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()

你的代码有几个问题,不运行也不奇怪

使用
子流程.call()时,不必调用
.wait()
。该函数负责
进程。wait()
调用

相反,
subprocess.call()
直接返回退出代码。引述:

运行args描述的命令等待命令完成,然后返回returncode属性

我的

此外,您的
ant_debug()
函数不会返回任何内容(更不用说运行命令了)。相反,它使用
os.system()
运行
ant
命令!把那个电话全部删除。使用
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
返回的值相同。

除了Martijn对subprocess.call的注释外,“/k”表示运行命令然后继续-因此在您告诉cmd退出之前不会终止。首先可能不需要使用cmd运行ant命令,所以只需从调用列表中删除前两项。如果您确实想通过诸如cmd之类的shell运行命令,则可以传递参数(但首先要了解原因,存在风险)

您还没有告诉我们运行此代码时出现了什么问题。它不起作用不是什么错误消息。