作者:手浪用户2602915623 | 来源:互联网 | 2023-08-27 21:28
当我在 cmd 中运行它时,我遇到了 ffmpeg 的问题,我有正确的输出 "ffprobe passionfruit.mp4 -show_streams"
但是当我使用相同的子进程时:
command = 'ffprobe "C:/Users/NMASLORZ/Downloads/passionfruit.mp4" -show_streams'
p = subprocess.Popen(command, universal_newlines=True, shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
text = p.stdout.read()
retcode = p.wait()
print (text)
我有这个输出:“'ffprobe' 不被识别为内部命令或外部命令、可执行程序或批处理文件。” 我尝试了每个合成器,即使在列表中我仍然有相同的输出
回答
那是因为您的 Windows 终端读取系统的 PATH 或以其他方式定义了ffprobe
. 当您Popen
使用shell=True
它运行时,它会通过 shell 运行执行,该 shell 可能会或可能不会(您的情况)可以访问该 PATH。
可能的解决方案:
- 提供到
ffprobe
(最简单的)的完整路径:
command = 'C:whateverffprobe.exe "C:/Users/NMASLORZ/Downloads/passionfruit.mp4" -show_streams'
- 使用
shell=False
. 可能不起作用,取决于您的系统。
command = ('ffprobe', 'C:/Users/NMASLORZ/Downloads/passionfruit.mp4', '-show_streams')
p = subprocess.Popen(command, universal_newlines=True, shell=False,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- 添加
PATH
通过env
变量并在该路径中添加ffprobe
。
如果 env 不是 None,则它必须是定义新进程的环境变量的映射;这些用于代替继承当前进程环境的默认行为。它直接传递给 Popen。
查看文档以获得进一步的指导。