2012-07-23 57 views
2

我正在通過Python抓取來自SVN的更新。打印多行引發異常

我有這樣的:

try: 
    output = subprocess.check_output(svn.update_cmd, 
            stderr=subprocess.STDOUT, shell=True) 
    print output 
    print 'finished svn update' 

    revision_number = output.split()[-1].rstrip('.') #revision number 
    if log_update: 
     write_update(revision_number) 
    return revision_number 
except subprocess.CalledProcessError, e: 
    raise SVNUpdateError(e.output) 

當我提出我的自定義SNVUpdateError,我正在換行打印出來作爲\n秒。

如果我try:exceptSVNUpdateError,我可以漂亮的打印行,但它出來作爲標準輸出,並傳遞到下一個代碼塊。我想提出這個例外,完全從任務中解脫出來,並將SVN客戶端的結果打印出爲什麼事情沒有換行符和其他特殊字符。

謝謝。

+1

我沒有關注。爲什麼不能只是'sys.stderr.write(e.output)'然後退出('sys.exit(1)')? – mgilson 2012-07-23 19:44:22

回答

1

由於您使用Python 2.x的:

# Usually a simpler error message without newlines 
print >>sys.stderr, e.message 
# If your message is overly complex, with newlines -- pick a line to print and process it 
#print >>sys.stderr, e.message.split('\n')[-1].strip() 
# Kill the process 
sys.exit(1) 

,將打印信息(與在註釋print語句限制新行)到標準錯誤,並終止該進程。

編輯

如果字符串在字符串中有實際的「\\ n」個字符,而不是特殊字符「\ n」(這意味着有人極有可能在字符串創建一個地方有一個類型),你可以在打印前做一個簡單的字符串替換:

print >>sys.stderr, malformatedStr.replace("\\n", "\n") 
+0

這很好。你給了我我要求的東西;沒有換行符的錯誤。我想這是一個開始,但是我正在考慮更多地沿着打印換行符的方向,而不是特殊字符'\ n'。 – Droogans 2012-07-23 23:01:34

+0

@Droogans我的編輯現在是否回答您的完整問題?你原來的文章中的措辭有點不清楚,我不確定你是否想要更短的字符串或重新格式化的字符串。 – Pyrce 2012-07-24 00:26:28

+0

您的編輯是解釋''abc \ nabc'''和'print'abc \ nabc「'之間的區別。我想要我的異常輸出中的一個。 – Droogans 2012-07-24 03:17:32