我想通过popen(python)处理command1,然后在第一个命令完成时运行另一个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()
答案 0 :(得分:1)
您的代码存在一些问题,并且它不会运行并不令人惊讶。
使用.wait()
时,您无需致电subprocess.call()
。该功能负责为您Process.wait()
调用 。
相反,subprocess.call()
直接返回退出代码 。引用subprocess.call()
documentation:
运行 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
;这里不需要shell。 /k
开关甚至阻止 cmd
shell关闭。 cmd
的返回值不一定与ant
返回的值相同。
答案 1 :(得分:0)
除了Martijn对subprocess.call的评论之外,“cmd / k”表示运行命令然后继续 - 所以在你告诉cmd退出之前这不会终止。可能不需要首先使用cmd运行ant命令,因此只需从调用列表中删除前两项。如果您的意思是通过诸如cmd之类的shell运行命令,则可以传递参数shell=True
(但首先要学习为什么,存在风险)。