当前位置: 首页 > 知识库问答 >
问题:

无法关闭使用Python tempfile模块创建的临时文件

姬奇思
2023-03-14

我正在使用一个名为pydub的基于ffmpeg的模块来编辑音频文件。我正在尝试使用模块tempfile,但由于某种原因,我无法关闭文件(它们没有被删除)。使用上下文管理器时,它抛出permissionerr

我所尝试的:

这段代码按照预期的方式工作,但是它没有删除tempfile,不会抛出任何错误。

temp1, temp2 = tempfile.NamedTemporaryFile(dir='data/temp', delete=False), None
# save something to temp1
seg = AudioSegment.from_file_using_temporary_files(temp1)

if options['overlay']:
    # create new seg
    if overlay_seg:
        temp2 = tempfile.NamedTemporaryFile(dir='data/temp', delete=False)
        # save something to temp2
        overlay_seg = AudioSegment.from_file_using_temporary_files(temp2)
        seg = seg.overlay(overlay_seg)

# edit the audio more here..

final = 'data//temp//edited.mp3'
seg.export(final, bitrate=options['bitrate'], format='mp3')
await ctx.send(file=discord.File(final)) # sends the file to a Discord chat
temp1.close()
if temp2:
    temp2.close()

这将创建第一个临时文件,然后抛出一个错误:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "<myfile>", line 153, in editaudio
    await attachment.save(temp1.name)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\message.py", line 155, in save
    with open(fp, 'wb') as f:
PermissionError: [Errno 13] Permission denied: '<base>data\\temp\\tmpnf2r68qe'
with tempfile.NamedTemporaryFile(dir='data/temp') as temp1: 
    await attachment.save(temp1.name)
    seg = AudioSegment.from_file_using_temporary_files(temp1)
    if options['overlay']:
        # create new seg
        if overlay_seg:
            with tempfile.NamedTemporaryFile(dir='data/temp') as temp2:
                # save something to temp2
                overlay_seg = AudioSegment.from_file_using_temporary_files(temp2)
                seg = seg.overlay(overlay_seg)

    # edit the audio more here..

    final = 'data//temp//edited.mp3'
    seg.export(final, bitrate=options['bitrate'], format='mp3')
    await ctx.send(file=discord.File(final)) # sends the file to a Discord chat

我不确定我在这里错过了什么

共有1个答案

郎星汉
2023-03-14

如果您使用delete=false选项创建了tempfiles,那么您的tempfiles不会被删除。这是不言自明的,但也在文件中提到。

第二种方法很难调试,因为您没有提供一个最小的可复制示例。

 类似资料:
  • 我正在网络上制作一个无缝的CSS模式。我知道这完全是无稽之谈,一点也不实际。但这只是为了好玩。 我已经创建了我的第一个瓷砖。现在我在想一个方法重复它来填充整个背景。 我能仅仅使用HTML和CSS就完成这个壮举吗?或者我必须使用javascript来完成此操作? - 下面是我使用javascript的步骤,纠正我或建议更好的方法: 计算当前浏览器的宽度和高度。 单个平铺是(150x150),我只需要

  • tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。 tempfile 模块中常用的函数,如表 1 所示。 表 1 tempfile 模块常用函数及功能 tempfile 模块函数 功能描述 tempfile.TemporaryFile(mode='w+b', buffering=None, encoding=Non

  • 问题内容: 有客观的更好的方法在bash脚本中创建临时文件吗? 我通常只要给他们起名就可以使用它们,例如tempfile-123,因为脚本结束后它将被删除。除了覆盖当前文件夹中可能的tempfile-123之外,这样做是否有其他缺点?还是以更谨慎的方式创建临时文件有什么好处? 问题答案: 该手册页解释了它相当好: 传统上,许多shell脚本使用pid作为后缀来命名程序名称,并将其用作临时文件名。这

  • 4.4.1 模块的创建和使用 在 Python 语言中,模块对应于 Python 程序文件,即每个 Python 程序文件就是一个模块。 模块是 Python 程序的最高层结构单元,用于组织程序的代码和数据,以便能被同一程 序的其他模块甚至被其他程序重用。一个模块可以导入其他模块,导入后就可以使用其他模 块中定义的函数、类等对象。 用模块作为程序的结构单元,至少有三个作用: (1)代码重用:将代码

  • 问题 你需要在程序执行时创建一个临时文件或目录,并希望使用完之后可以自动销毁掉。 解决方案 tempfile 模块中有很多的函数可以完成这任务。 为了创建一个匿名的临时文件,可以使用 tempfile.TemporaryFile : from tempfile import TemporaryFile with TemporaryFile('w+t') as f: # Read/writ

  • 问题内容: 无论如何,我可以写到tempfile并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command / tmp / some-temp-file。 提前谢谢了。 问题答案: 如果需要带有名称的临时文件,则必须使用该功能。然后就可以使用了。有关详细信息,请阅读 http://docs.python.org/library/tempfile.html。