我正在尝试使用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()
答案 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
回来。