我正在尝试使用 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()
最佳答案
当你做的时候
sys.stdout = sys.stdout.detach()
它移除了在 Python 3 的终端上正常打印
的能力,因为你 get a buffer instead of one wrapped for encoding and decoding .在您打印
之前,您应该:
sys.stdout = sys._stdout
返回原来的stdout
。
关于Python 3 如何从标准输入上的文件生成 md5 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202585/