【发布时间】:2018-06-15 19:24:38
【问题描述】:
我正在尝试编写一个打印文件校验和的小脚本(使用来自https://gist.github.com/Zireael-N/ed36997fd1a967d78cb2 的一些代码):
import sys
import os
import hashlib
file = '/Users/Me/Downloads/2017-11-29-raspbian-stretch.img'
with open(file, 'rb') as f:
contents = f.read()
print('SHA256 of file is %s' % hashlib.sha256(contents).hexdigest())
但我收到以下错误消息:
Traceback (most recent call last):
File "checksum.py", line 8, in <module>
contents = f.read()
OSError: [Errno 22] Invalid argument
我做错了什么?我在 macOS High Sierra 上使用 python 3
【问题讨论】:
-
无法复制。尝试获取任何文件或仅特定文件的校验和时会发生这种情况吗?您使用的是 Python 2 还是 Python 3?为什么您的错误消息说
contents = f.read()是第 8 行,而它只是此处给出的代码的第 6 行? -
你试过其他文件吗? Python 只是翻译它从操作系统 (
EINVAL) 获得的错误代码,并且错误代码有可能来自文件系统驱动程序本身(因此它可能是其中的错误)。通常EINVAL响应 read 意味着 fd 编号是错误的,但这是不寻常的情况,因为 Python 会自行控制 fd 编号的正确性。 -
@roganjosh:那里给出的答案仅适用于 Windows 系统。这个问题似乎是关于 macOS 上的问题。
-
我现在尝试了其他文件,它们运行良好。原始 .img 文件仍然给出相同的错误消息。可能是因为它的大小为 4.92 GB?
-
@Hallvard:你使用的是什么版本的 Python?你在 32 位系统上吗?根据这两个问题的答案,可能会出现几个问题。
标签: python python-3.x macos file-io