Python 如何强制wait()完全等待子流程?wait()不能工作
我想用popen(python)处理command1,然后在第一个command2完成后运行另一个command2。当我使用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
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运行命令,则可以传递参数(但首先要了解原因,存在风险) 您还没有告诉我们运行此代码时出现了什么问题。它不起作用不是什么错误消息。