我正在以下列方式从我的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)
答案 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)