2012-09-04 37 views
1

我執行的svn命令成功,或不執行(假設我不想使用pysvn)以下方式從我的Python腳本(例如):如何找到,如果SVN命令在python

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

所以看起來這將是一個很好的解決方案考慮到consideation大衛的建議:

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)