我一直使用这个作为参考,但不能够完成什么我需要: 叫一个外部命令在蟒蛇

我也读这样的: http://www.python.org/dev/peps/pep-3145/

我们的项目,我们有5svn结账,需要更新之前,我们可以部署我们的应用程序。在我的开发环境中,在快速部署一点更重要的是对生产力比生产部署,我的工作已经加快这一进程。

我有个庆典脚本,已经工作体面,但有某些限制。我火了多个'svn更新与以下bash命令:

(svn update /repo1) & (svn update /repo2) & (svn update /repo3) &

所有这些并行运行,它工作得很好。我也利用这种模式在其余的建立脚本用于发每只蚂蚁构建,然后移动战争Tomcat。

但是,我有没有控制停止的部署如果一个更新或建设失败。

我重写了我的砸脚本蟒蛇这样我有更多的控制权分支机构和部署的过程。

我使用的子流程.呼吁()火了的'svn更新/回购'的命令,但每一个行动顺序。我尝试'(svn更新/回购)&'和那些所有火了,但结果代码立即返回。所以我没有办法确定如果一个特定的命令失败或不在异步模式。

import subprocess

subprocess.call( 'svn update /repo1', shell=True )
subprocess.call( 'svn update /repo2', shell=True )
subprocess.call( 'svn update /repo3', shell=True )

我喜欢找到一种方法来有Python火了每个Unix命令,如果有任何的呼吁失败时,在任何时间整个脚本停止。

有帮助吗?

解决方案

不要用 shell=True.它将needlessy援引的外壳叫你的 svn 计划,并会给你的贝壳的返回代码,而不是svn。

repos = ['/repo1', '/repo2', '/repo3']
# launch 3 async calls:
procs = [subprocess.Popen(['svn', 'update', repo]) for repo in repos]
# wait.
for proc in procs:
    proc.wait()
# check for results:
if any(proc.returncode != 0 for proc in procs):
    print 'Something failed'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top