euckr 프로그램 내부에서 돌릴 경우 제대로된 메시지 확인이 어렵습니다.
쉽게 생각할 수 있는 해결 방법 중 하나는 pysvn 함수를 호출하기 전에
stdout 과 stderr 을 보관했다가 호출이 완료되면 복구하는 것인데...
자칫하면 개노가다 코딩이 되기 쉽습니다.
이런 경우에 사용하는 방법이 데코레이터입니다.
import sys
class SVN_Translator:
def __init__(self, out):
self.out = out
def write(self, msg):
self.out.write(msg.decode("utf8").encode("mbcs"))
def SVN_Translate(func):
def call(*args, **kwargs):
oldout = sys.stdout
olderr = sys.stderr
sys.stdout = SVN_Translator(oldout)
sys.stderr = SVN_Translator(olderr)
try:
ret = func(*args, **kwargs)
except:
raise
finally:
sys.stdout = oldout
sys.stderr = olderr
return ret
return call
위처럼 작성한 다음 앞으로 사용하려는 함수 위에 @SVN_Translate 라고 적어주면 끝입니다.
import pysvn
@SVN_Translate
def SVN_Update(path):
client = pysvn.Client()
updateResults = client.update(path)
if updateResults:
updateResult = updateResults[0]
return updateResult.number
print "현재 리비전은 %d입니다" % (SVN_Update("."))
~(-_-)~ 짠
자동 락 걸어주거나 할때도 유용한 방법입니다.


python 을 좋아하는 게임 프로그래머