2012-04-18 3 views
1

파이썬 3을 사용하여 stdin에서 md5 해시를 계산하려고합니다.Python 3 표준 입력에서 파일에서 md5 해시를 생성하는 방법은 무엇입니까?

다음은 반환되는 오류 메시지입니다. 왜 그것이 md5 해쉬를 반환하지 않는지 나는 알 수 없다. 어떤 도움을 주셔서 감사합니다.

$./pymd5.py < tmp.pdf 
Traceback (most recent call last): 
    File "./pymd5.py", line 29, in <module> 
    main() 
    File "./pymd5.py", line 25, in main 
    print(m.hexdigest()) 
TypeError: 'str' does not support the buffer interface 
$ 

코드 :

#!/usr/local/bin/python3.2 

import sys 
import hashlib 

BUFSIZE = 4096 

def make_streams_binary(): 
    sys.stdin = sys.stdin.detach() 
    sys.stdout = sys.stdout.detach() 

def main(): 
    make_streams_binary() 
    m = hashlib.md5() 
    while True: 
     data = sys.stdin.read(BUFSIZE) 
     if not data: 
      break 
     m.update(data) 

    print(m.hexdigest()) 

if __name__ == "__main__": 
    main() 
+0

[TypeError : 'str'은 버퍼 인터페이스를 지원하지 않습니다.] (http://stackoverflow.com/questions/5471158/typeerror-str-does-not-support-the-buffer-interface) – agf

+0

I 미안하지만 문제가 무엇인지 설명하지 못합니다. –

답변

5

당신이

sys.stdout = sys.stdout.detach() 

할 그것은 당신 때문에 get a buffer instead of one wrapped for encoding and decoding, 일반적으로 파이썬 3의 단자에 print 할 수있는 기능을 제거합니다. 당신 print하기 전에 수행해야합니다

sys.stdout = sys._stdout 

원래 stdout 다시 얻으려면.

+0

위대한 설명입니다. 고마워 이제 고마워. –

관련 문제