1

我正在以以下方式(例如)从我的 python 脚本中执行 svn 命令(假设我不想使用 pysvn):

cmd = 'svn update http://myserver/myrepo'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output, stderr = p.communicate()      
    status = p.returncode
    if status != 0: 
        logging.error('A fatal has error occurred while executing command: ' + cmd)
        exit(-1)

假设服务器上不存在 myrepo。在这种情况下,SVN 将默默地产生如下输出:

Skipped http://myserver/myrepo

并且状态变量的值为“0”。有没有一种方法可以通过返回代码来检查是否跳过了 SVN 更新,或者实际上是否成功更新了 repo?

目前,我正在使用以下解决方案,但不确定它是否是一个优雅的解决方案:

if 'Skipped' in output:
    logging.error('SVN update failed!')
    exit(-1)
4

2 回答 2

0

优雅与否,如果它有效,它就有效!但是我认为你应该研究 pysvn,它可能会做你需要的事情。但是它似乎使用的是 svn 1.6 而不是 1.7: http: //pysvn.tigris.org/docs/pysvn_prog_guide.html

于 2012-09-05T06:39:29.733 回答
0

所以看起来这将是一个很好的解决方案,考虑到大卫的建议:

cmd = 'svn update http://myserver/myrepo'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output, stderr = p.communicate()      
status = p.returncode
if output.strip().startswith('Skipped'):
    logging.error('A fatal has error occurred while executing command: ' + cmd)
    exit(-1)
于 2012-09-05T07:22:19.797 回答