Python PyDub OSError:[WinError 6]句柄无效
我正在使用Python 3.8.7,但找不到解决方案 在我的项目中,我使用pydub.AudioSegment从文件中获取音频,然后以不同的格式导出该音频。当我直接运行python文件时,我的代码工作得非常好。但是,当我使用pyinstaller将其转换为可执行文件,运行该程序并使用pydub导入音频时,会出现以下错误:Python PyDub OSError:[WinError 6]句柄无效,python,subprocess,pyinstaller,python-3.8,pydub,Python,Subprocess,Pyinstaller,Python 3.8,Pydub,我正在使用Python 3.8.7,但找不到解决方案 在我的项目中,我使用pydub.AudioSegment从文件中获取音频,然后以不同的格式导出该音频。当我直接运行python文件时,我的代码工作得非常好。但是,当我使用pyinstaller将其转换为可执行文件,运行该程序并使用pydub导入音频时,会出现以下错误: Traceback (most recent call last): File "main.py", line 269, in <module&g
Traceback (most recent call last):
File "main.py", line 269, in <module>
File "main.py", line 213, in convertfile
File "main.py", line 133, in cloud_upload
File "pydub\audio_segment.py", line 728, in from_file
File "pydub\utils.py", line 274, in mediainfo_json
File "subprocess.py", line 804, in __init__
File "subprocess.py", line 1142, in _get_handles
OSError: [WinError 6] The handle is invalid
我尝试在第274行的utils.py中添加stdin=subprocess.DEVNULL和stdin=subprocess.PIPE,但也没有成功。不过,可能是我添加了错误的插件,所以我们也非常感谢诸如此类的建议。很可能PyInstaller无法识别导入的插件。虽然如果你正在尝试制作一个应用程序,我建议改用快捷方式,但这会更好,因为你可以自定义快捷方式的图标。这是许多应用程序的主要用途。PyInstaller可能无法识别导入的插件。虽然如果你正在尝试制作一个应用程序,我建议改用快捷方式,但这会更好,因为你可以自定义快捷方式的图标。这是许多应用程序的主要用途。我只通过从pyinstaller中删除--onefile选项,并将ffmpeg.exe和ffprobe.exe与main.exe文件一起放入结果文件夹来解决这个问题 这不是解决问题的好办法,因为我仍然更喜欢使用
--onefile
;但它是有效的
对于如何使用--onefile或者为什么会出现这种情况,我仍然愿意听取建议。我只通过从pyinstaller中删除--onefile选项,并将ffmpeg.exe和ffprobe.exe与主文件一起放入结果文件夹来解决这个问题 这不是解决问题的好办法,因为我仍然更喜欢使用
--onefile
;但它是有效的
我仍然愿意接受关于如何使其与--one文件一起工作的建议,或者仅仅是为什么会出现这种情况的一般建议。我假设每当
export
方法试图通过子进程调用ffmpeg时,它都会起作用。您能否手动将shell=True
添加到此行:@Dimitar,感谢您的快速响应!我这样做了,但很遗憾,我得到了同样的错误。我不知道这是否与此有关,但我的路径中也没有ffmpeg。我的根目录中有ffmpeg.exe、ffplay.exe和ffprobe.exe以及主脚本。我还使用--add-data将这些exe文件添加到pyinstaller中的程序中。这也可能是一个原因,您是否可以将它们添加到路径中,然后重试?另外,通过事先调用它们来确保它们在那里,不要用添加数据来添加它们。我只是自己尝试了一下,没有发现任何问题。我的路径中有ffmpeg
。唯一不同的是,我没有在导出中指定编解码器。使用Python3.9.1、pydub 0.25.1和pyinstaller 4.2,我假设只要export
方法试图通过子进程调用ffmpeg时,它就有一些事情要做。您能否手动将shell=True
添加到此行:@Dimitar,感谢您的快速响应!我这样做了,但很遗憾,我得到了同样的错误。我不知道这是否与此有关,但我的路径中也没有ffmpeg。我的根目录中有ffmpeg.exe、ffplay.exe和ffprobe.exe以及主脚本。我还使用--add-data将这些exe文件添加到pyinstaller中的程序中。这也可能是一个原因,您是否可以将它们添加到路径中,然后重试?另外,通过事先调用它们来确保它们在那里,不要用添加数据来添加它们。我只是自己尝试了一下,没有发现任何问题。我的路径中有ffmpeg
。唯一不同的是,我没有在导出中指定编解码器。使用python 3.9.1、pydub 0.25.1和pyinstaller 4.2
sound = AudioSegment.from_file(filepath)
sound.export(new_filepath, format="ogg",codec='libopus')