Python 3.9: OSError: [Errno 9] Bad file descriptor during Temporary File
Python 3.9: OSError: [Errno 9] Bad file descriptor during Temporary File
我正在尝试从 S3 检索图像并对其进行一些处理:
s3 = image_aws_session().client("s3")
with tempfile.TemporaryFile() as tmp:
with open(tmp.name, "r+b") as f:
s3.download_fileobj(
Bucket=settings.S3_IMAGE_BUCKET,
Key=s3_key,
Fileobj=f,
)
f.seek(0)
image_str = f.read().hex()
print(image_str)
return image_str
我取回了一个文件,它还打印了一个很好的长散列,因此抓取本身可以正常工作。我不得不挡住 s3 键,因为它不重要。
但是,在返回图像哈希之前它会出错并显示 OSError: [Errno 9] Bad file descriptor
。我试过来回缩进无济于事。
也许我只是没有正确理解某些东西
- 您正在以读取二进制模式打开文件,但 download_fileobj 试图写入它,但这是行不通的。此外,您通过包含
+
来附加它,这可能不是必需的。尝试 open('wb')
- 可能
download_fileobj
完成后文件没有更新。下载后尝试让它关闭并重新打开它
s3 = image_aws_session().client("s3")
with tempfile.TemporaryFile() as tmp:
with open(tmp.name, "wb") as f:
s3.download_fileobj(
Bucket=settings.S3_IMAGE_BUCKET,
Key=s3_key,
Fileobj=f,
)
with open(tmp.name, 'rb') as f:
image_str = f.read().hex()
print(image_str)
return image_str
我正在尝试从 S3 检索图像并对其进行一些处理:
s3 = image_aws_session().client("s3")
with tempfile.TemporaryFile() as tmp:
with open(tmp.name, "r+b") as f:
s3.download_fileobj(
Bucket=settings.S3_IMAGE_BUCKET,
Key=s3_key,
Fileobj=f,
)
f.seek(0)
image_str = f.read().hex()
print(image_str)
return image_str
我取回了一个文件,它还打印了一个很好的长散列,因此抓取本身可以正常工作。我不得不挡住 s3 键,因为它不重要。
但是,在返回图像哈希之前它会出错并显示 OSError: [Errno 9] Bad file descriptor
。我试过来回缩进无济于事。
也许我只是没有正确理解某些东西
- 您正在以读取二进制模式打开文件,但 download_fileobj 试图写入它,但这是行不通的。此外,您通过包含
+
来附加它,这可能不是必需的。尝试open('wb')
- 可能
download_fileobj
完成后文件没有更新。下载后尝试让它关闭并重新打开它
s3 = image_aws_session().client("s3")
with tempfile.TemporaryFile() as tmp:
with open(tmp.name, "wb") as f:
s3.download_fileobj(
Bucket=settings.S3_IMAGE_BUCKET,
Key=s3_key,
Fileobj=f,
)
with open(tmp.name, 'rb') as f:
image_str = f.read().hex()
print(image_str)
return image_str