pydub AudioSegment.export 正在锁定 smb 共享上的文件。不能删除那个文件
pydub AudioSegment.export is locking a file on smb share. Can't delete that file
我 运行 在尝试使用 pydub 从立体声文件中提取单声道音频时遇到了问题。
代码如下:
import wave
import audioop
from pydub import AudioSegment
def cantDeleteLockedFile():
audiofile = "/Volumes/test/stereotest.wav"
audiostrip = AudioFileClip(audiofile)
if audiostrip.nchannels > 1:
with open(audiofile, "rb") as oaudiofile:
mono_audios = AudioSegment.from_file(oaudiofile, format="wav")
# List of AudioSegments, mono files, which can be accessed via [0] and [1]
mono_audios = mono_audios.split_to_mono()
audioChannelOne = str(audiofile.rsplit(".", 1)[0]) + "a.wav"
# This line is locking the stereo file
mono_left = mono_audios[0].export(audioChannelOne, format="wav")
# This extracts the mono left track from the stereo track
# On the same location a file will be created, in this example:
# "/Volumes/test/stereotesta.wav"
# This should unlock the file, but doesnt
mono_left.close()
# When trying to delete the file here, it will fail
# without exception raised
os.remove(audiofile)
if os.path.exists(audiofile):
return True
else:
return False
return False
执行此代码后,在我的例子中,它嵌入到 API 微服务系统中,不会退出代码。然后立体声音频文件将被锁定,只要该微服务是运行。该文件不会被删除,函数 return 的值将为“False”。如果您稍后在文件系统上手动导航到该文件并尝试手动删除它,它也会失败。它会先删除它,然后它会神奇地弹回来。
我知道之前在其他论坛上讨论过这个问题。但是建议的解决方案不起作用。
参考:https://github.com/jiaaro/pydub/issues/305
要么我完全遗漏了什么。但是,也许有一种解决方法可以强行解锁文件,以便将其删除?我没有在网上找到参考资料。
基本上我知道,pydub 正在锁定资源,我无法用它来解锁 Audio Segment 后面的 wav 文件。
很高兴阅读您的反馈和建议。
谢谢!
用于检查立体声文件的 Audiosegment 也需要关闭。
这会阻止存储端的文件。
添加一个简单的:
audiostrip.close()
解决了问题。
我 运行 在尝试使用 pydub 从立体声文件中提取单声道音频时遇到了问题。
代码如下:
import wave
import audioop
from pydub import AudioSegment
def cantDeleteLockedFile():
audiofile = "/Volumes/test/stereotest.wav"
audiostrip = AudioFileClip(audiofile)
if audiostrip.nchannels > 1:
with open(audiofile, "rb") as oaudiofile:
mono_audios = AudioSegment.from_file(oaudiofile, format="wav")
# List of AudioSegments, mono files, which can be accessed via [0] and [1]
mono_audios = mono_audios.split_to_mono()
audioChannelOne = str(audiofile.rsplit(".", 1)[0]) + "a.wav"
# This line is locking the stereo file
mono_left = mono_audios[0].export(audioChannelOne, format="wav")
# This extracts the mono left track from the stereo track
# On the same location a file will be created, in this example:
# "/Volumes/test/stereotesta.wav"
# This should unlock the file, but doesnt
mono_left.close()
# When trying to delete the file here, it will fail
# without exception raised
os.remove(audiofile)
if os.path.exists(audiofile):
return True
else:
return False
return False
执行此代码后,在我的例子中,它嵌入到 API 微服务系统中,不会退出代码。然后立体声音频文件将被锁定,只要该微服务是运行。该文件不会被删除,函数 return 的值将为“False”。如果您稍后在文件系统上手动导航到该文件并尝试手动删除它,它也会失败。它会先删除它,然后它会神奇地弹回来。
我知道之前在其他论坛上讨论过这个问题。但是建议的解决方案不起作用。
参考:https://github.com/jiaaro/pydub/issues/305
要么我完全遗漏了什么。但是,也许有一种解决方法可以强行解锁文件,以便将其删除?我没有在网上找到参考资料。 基本上我知道,pydub 正在锁定资源,我无法用它来解锁 Audio Segment 后面的 wav 文件。
很高兴阅读您的反馈和建议。
谢谢!
用于检查立体声文件的 Audiosegment 也需要关闭。 这会阻止存储端的文件。
添加一个简单的:
audiostrip.close()
解决了问题。