Python 3如何从stdin上的文件生成md5哈希?

时间:2012-04-18 04:02:05

标签: python string buffer md5

我正在尝试使用Python 3从stdin计算文件的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()

1 个答案:

答案 0 :(得分:5)

当你这样做时

sys.stdout = sys.stdout.detach()

由于你get a buffer instead of one wrapped for encoding and decoding,它删除了Python 3终端正常print的能力。在你print之前,你应该这样做:

sys.stdout = sys._stdout

让原来的stdout回来。