-1

我想通过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()
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

除了 Martijn 对 subprocess.call 的评论之外,“ cmd /k”意味着运行一个命令然后继续——所以在你告诉 cmd 退出之前它不会终止。一开始可能不需要使用 cmd 运行 ant 命令,因此只需从调用列表中删除前两项即可。如果您确实打算通过 cmd 之类的 shell 运行命令,则可以传递参数shell=True(但首先要了解原因,这是有风险的)。

于 2013-09-28T16:51:10.870 回答