Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyDub OSError:[WinError 6]句柄无效_Python_Subprocess_Pyinstaller_Python 3.8_Pydub - Fatal编程技术网

Python PyDub OSError:[WinError 6]句柄无效

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

我正在使用Python 3.8.7,但找不到解决方案

在我的项目中,我使用pydub.AudioSegment从文件中获取音频,然后以不同的格式导出该音频。当我直接运行python文件时,我的代码工作得非常好。但是,当我使用pyinstaller将其转换为可执行文件,运行该程序并使用pydub导入音频时,会出现以下错误:

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')