1

我正在尝试使用 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()
4

1 回答 1

5

当你这样做

sys.stdout = sys.stdout.detach()

print它消除了在 Python 3 的终端上正常运行的能力,因为您得到的是一个缓冲区,而不是一个为编码和解码包装的缓冲区。在你之前print,你应该做:

sys.stdout = sys._stdout

要把原件拿stdout回来。

于 2012-04-18T04:14:14.943 回答