- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在用 Python 写入 NamedTemporaryFile 然后读回时遇到问题。该函数通过 tftpy 将文件下载到临时文件,读取该文件,对内容进行哈希处理,然后将哈希摘要与原始文件进行比较。有问题的函数如下:
def verify_upload(self, image, destination):
# create a tftp client
client = TftpClient(ip, 69, localip=self.binding_ip)
# generate a temp file to hold the download info
if not os.path.exists("temp"):
os.makedirs("temp")
with NamedTemporaryFile(dir="temp") as tempfile, open(image, 'r') as original:
try:
# attempt to download the target image
client.download(destination, tempfile, timeout=self.download_timeout)
except TftpTimeout:
raise RuntimeError("Could not download {0} from {1} for verification".format(destination, self.target_ip))
# hash the original file and the downloaded version
original_digest = hashlib.sha256(original.read()).hexdigest()
uploaded_digest = hashlib.sha256(tempfile.read()).hexdigest()
if self.verbose:
print "Original SHA-256: {0}\nUploaded SHA-256: {1}".format(original_digest, uploaded_digest)
# return the hash comparison
return original_digest == uploaded_digest
问题是,每次我尝试执行行 uploaded_digest = hashlib.sha256(tempfile.read()).hexdigest()
时,应用程序都会错误并显示 ValueError - I/O 对已关闭文件的操作
。由于 with
block 不完整,我很难理解为什么临时文件会被关闭。我能想到的唯一可能性是 tftpy 在下载后关闭文件,但我在 tftpy 源代码中找不到发生这种情况的任何点。请注意,我还尝试插入行 tempfile.seek(0)
以使文件恢复到正确的读取状态,但这也给了我 ValueError
.
tftpy 是否可能关闭文件?我读到 NamedTemporaryFile 中可能存在错误导致此问题?为什么在 with
block 定义的引用超出范围之前关闭文件?
最佳答案
TFTPy 正在关闭文件。当您查看源代码时,您错过了以下代码路径:
class TftpClient(TftpSession):
...
def download(self, filename, output, packethook=None, timeout=SOCK_TIMEOUT):
...
self.context = TftpContextClientDownload(self.host,
self.iport,
filename,
output,
self.options,
packethook,
timeout,
localip = self.localip)
self.context.start()
# Download happens here
self.context.end() # <--
TftpClient.download
来电 TftpContextClientDownload.end
:
class TftpContextClientDownload(TftpContext):
...
def end(self):
"""Finish up the context."""
TftpContext.end(self) # <--
self.metrics.end_time = time.time()
log.debug("Set metrics.end_time to %s", self.metrics.end_time)
self.metrics.compute()
TftpContextClientDownload.end
来电 TftpContext.end
:
class TftpContext(object):
...
def end(self):
"""Perform session cleanup, since the end method should always be
called explicitely by the calling code, this works better than the
destructor."""
log.debug("in TftpContext.end")
self.sock.close()
if self.fileobj is not None and not self.fileobj.closed:
log.debug("self.fileobj is open - closing")
self.fileobj.close() # <--
和TftpContext.end
关闭文件。
关于Python NamedTemporaryFile - 读取时出现值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465418/
我在用 Python 写入 NamedTemporaryFile 然后读回时遇到问题。该函数通过 tftpy 将文件下载到临时文件,读取该文件,对内容进行哈希处理,然后将哈希摘要与原始文件进行比较。有
我有以下(简化的)代码: with NamedTemporaryFile() as f: f.write(zip_data) f.flush() subprocess.call
我想加载临时文件进行更改或者只是能够将它上传到某个地方,当我尝试这样做时 - 它会抛出一个错误,如下所示 我已将权限设置为 w+ - 理想情况下应该允许我读写,不确定我在这里遗漏了什么 - 任何帮助将
我正在尝试将文件下载到临时文件并将该文件发布到另一项服务。我尝试使用 NamedTemporaryFile 进行此操作,但我被迫关闭文件并重新打开它。 def main(): validate
我正在尝试编写一系列写入临时文件的函数,然后对写入的文件进行处理。我试图了解文件的处理方式。 我想在摘要中做的是: def create_function(inputs): # create
这是对 this question 的后续跟进关于使用 NamedTemporaryFile() 我有一个创建和写入临时文件的函数。然后我想在另一个函数中使用该文件,该函数调用使用该文件的终端命令(该
创建此类文件后如何更改 NamedTemporaryFile 的删除标志? 为什么?虽然大多数时候我不需要保留临时文件,但如果我从代码内部检测到错误,我想保留它们以便能够分析它们。 最佳答案 对于现在
在 Python 2 中,创建临时文件并访问它很容易。然而,在 Python 3 中,情况似乎不再如此。我对如何获取使用 tempfile.NamedTemporaryFile() 创建的文件感到困惑
我正在编写一个 Python 脚本,该脚本需要创建大约 50 个不同的临时文件,这些文件在脚本执行过程中经常被附加并在最后合并。我确信 tempfile 模块可以满足我的需要,但我无法通过阅读文档来弄
原始问题 - MCVE 以下脚本应该使用 chrome headless 打印成 pdf(我运行的是 windows 10 和 python 3.6): import subprocess from
Python tempfile.NamedTemporaryFile 的这种用法是否安全(即避免了已弃用的 tempfile.mktemp 的安全问题)? def mktemp2(): """
Python 模块 tempfile 包含 NamedTemporaryFile 和 TemporaryFile。前者的文档说 Whether the name can be used to open
这是我创建的一个测试,用于重现我在使用时遇到的问题临时文件.NamedTemporaryFile()。问题是当我使用 tempfile 时我的 CSV 中的数据从文件末尾被截断。 当您运行此测试脚本时
我是 python2.6 编程的新手,我的目标是在 os 的临时目录中创建 .txt 或 .xls“临时文件”并向其中写入一些数据。然后从“临时文件”中读取数据,之后读取数据完成,从临时目录中删除“临
我正在 Ubuntu 16.04 下的 Python 3 中将一些内容写入 tempfile.NamedTemporaryFile。在某些情况下,我想在写入完成后将该文件复制到其他位置。使用以下代码重
我无法在最初创建 NamedTemporaryFile 后修改它的内容。 按照下面的示例,我从 URL 的内容(JSON 数据)创建了一个 NamedTemporaryFile。 然后,我的目标是重新
python docs for tempfile.NamedTemporaryFile说: Whether the name can be used to open the file a second
我想使用 tempfile.NamedTemporaryFile() 将一些内容写入其中,然后打开该文件。我写了以下代码: tf = tempfile.NamedTemporaryFile() tfN
通过搜索现有问题尚未找到解决方案,这里是: Python 的新手。尝试使用 tempfile 包创建临时文件。以下是因 ValueError 失败的代码行: (temp_file, self.buck
我正在编写一个 python3 程序,该程序生成一个文本文件,该文件使用 asciidoc 进行后处理以生成 html 和 pdf 格式的最终报告。 python 程序生成数千个包含图形的文件,这
我是一名优秀的程序员,十分优秀!