2012-07-23 2 views
2

나는 파이썬을 통해 SVN에서 업데이트를 얻고있다.여러 줄 올리기 예외 인쇄

나는이있다 : 나는 내 사용자 지정 SNVUpdateError 인상

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) 

, 내가 \n들로 밖으로 인쇄 할 때 줄 바꿈을 얻고있다.

try:exceptSVNUpdateError이라면 선을 멋지게 인쇄 할 수 있지만 stdout으로 나오고 다음 코드 블록으로 전달됩니다. 나는 예외를 제기하고, 작업에서 완전히 탈출하고, 개행과 다른 특수 문자없이 왜 남쪽으로 갔는지에 대한 SVN 클라이언트의 결과를 인쇄하고 싶습니다.

감사합니다. 당신의 사용 파이썬 2.x는 이후

+1

나는 팔로우하지 않습니다. 왜'sys.stderr.write (e.output)'만하고 종료 ('sys.exit (1)') 할 수 없습니까? – mgilson

답변

1

: 표준 에러에 (주석 인쇄 문에서 제한된 줄 바꿈 포함) 메시지를 인쇄하고 프로세스를 종료합니다

# 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) 

.

편집

문자열 (가장 가능성이있는 사람을 의미 문자열 생성 어딘가에 유형이있는) 문자열에 "\ n"대신 특수 문자의 실제 "\\ n"은 문자가있는 경우, 당신은 할 수 인쇄하기 전에 간단한 문자열 교체를하십시오 :

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

그게 전부입니다. 당신은 내가 원하는 것을 나에게 주었다. 개행하지 않은 오류. 나는 이것이 시작이라고 생각하지만, 개행 문자를 인쇄하는 라인을 따라 생각했다. 특수 문자'\ n'가 아니라. – Droogans

+0

@Droogans 내 편집 내용이 이제 전체 질문에 대한 답변입니까? 귀하의 말씨는 원래 게시물에서 약간 불분명했으며 더 짧은 문자열이나 형식이 바뀐 문자열을 원한다면 확실하지 않았습니다. – Pyrce

+0

당신의 편집은''abc \ nabc "'와''abc \ nabc"'를 해석하는 것의 차이입니다. 내 예외의 결과물에 대한 한 가지를 원해. – Droogans