2012-05-13 2 views
0

파이썬에서 print 구문을 추가 텍스트로 사용자 정의하고 싶습니다. 하지만 내 접근 방식을 통해 입력 키가 입력 버퍼링되고있는 것 같습니다.Python : 기본 인쇄 기능 수정

내가 사용하는 프로그램입니다 :

class rename_print: 
    def __init__(self, stdout): 
     self.stdout = stdout  
    def write(self, text): 
     self.stdout.write('###' + text)  
     self.stdout.flush() 
    def close(self): 
     self.stdout.close() 

import sys 

prints = rename_print(sys.stdout) 
sys.stdout = prints 
print 'abc' 

내가 얻을 출력은

가 ###

내가 기대 출력은

이다 ABC###입니다

### abc

이 이유는 무엇입니까? 입력 스트림이 과 함께 버퍼링되는 것을 의심합니다. 키를 입력하십시오. 이 문제를 어떻게 해결할 수 있습니까?

+0

당신은 우리에게 인쇄 코드를 보여주지 않았기 때문에, 우리는 버그가 무엇인지 모릅니다. – orlp

+0

미안합니다. .. 그에 따라 코드를 편집하십시오 .. – Rilwan

+0

나는 인쇄가 암시 적으로 개행을 추가한다는 것을 알고 있습니다. 이 여분의 인쇄는 또한 당신이 다른 "### \ n" –

답변

1

나는 인쇄가 암시 적으로 개행을 추가한다는 사실을 생각합니다. 이 추가 인쇄도 다른 "### \ 없음"그것은 조금 해키

를 얻을 귀하의 리디렉션 쓰기 함수를 호출하지만이 시도된다

...

def write(self, text): 
    if text!="\n": 
     self.stdout.write('###' + text) 

합니다. ..

+0

감사합니다 많은 guys.i를 얻을 리디렉션 된 쓰기 함수를 호출합니다. 버퍼에서 '\ n'을 제거하려고했는데.이게 .. – Rilwan

+0

이 때 실패합니다 두 개의 print 서술문입니다. 우리도 저것을 처리해야합니다. – Rilwan

2

print은 기본값 (또는 각 인수 사이의 공백)마다 출력 스트림에 개행 문자를 씁니다. 따라서 write으로 두 번 전화를 걸면 하나는 "abc"이고 다른 하나는 "\n"입니다.

그 행동을 원하지 않는다면 그 전화를 별도로 처리해야합니다.