如何在python中查找svn命令是否成功执行

时间:2012-09-04 22:28:21

标签: python svn exit-code

我正在以下列方式从我的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更新是否跳过或实际上是否成功更新了回购?

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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)