4

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、改行が\nsとして出力されます。

try:exceptの場合SVNUpdateError、その行をきれいに印刷できますが、それはstdoutとして出力され、次のコードブロックに渡されます。例外を提起し、タスクを完全に回避し、改行やその他の特殊文字なしで物事が南に進んだ理由について、SVNクライアントからの結果を印刷したいと思います。

ありがとう。

4

1 に答える 1

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ステートメントの改行が制限された状態で)stderrに出力され、プロセスが強制終了されます。

編集

文字列に特殊文字「\n」ではなく実際の「\\n」文字が含まれている場合(つまり、誰かが文字列作成のどこかにタイプを持っている可能性が高い)、印刷する前に簡単な文字列置換を行うことができます。

print >>sys.stderr, malformatedStr.replace("\\n", "\n")
于 2012-07-23T20:06:21.617 に答える