Python:如何使用os.spawnv传递大量参数?

0 投票
2 回答
4656 浏览
提问于 2025-04-16 04:37

我正在为XBMC(xbmc.org)开发一个Python插件,我想在插件中执行一个程序(ffmpeg.exe),但不想让命令提示符窗口出现。如果我使用os.system()来调用ffmpeg.exe,虽然可以正常工作,但XBMC会最小化,因为os.system会打开一个命令提示符窗口几秒钟。

所以,我尝试使用os.spawnv(),我觉得这样可以在不出现命令提示符窗口的情况下调用ffmpeg.exe。问题是我知道如何使用os.system,但不知道怎么使用os.spawnv。我试过这样做,但没有成功:

os.spawnv(os.P_DETACH,'"C:\Program Files (x86)\XBMC\scripts\Base De Datos\ffmpeg.exe" -y -ss 30 -i "C:\Program Files (x86)\XBMC\scripts\Base De Datos\Movie.avi" -f mjpeg -vframes 1 -s 720x400 -an  "C:\Program Files (x86)\XBMC\scripts\Base De Datos\thumbnail.jpg"')

"C:\Program Files (x86)\XBMC\scripts\Base De Datos\ffmpeg.exe" = The path of the ffmpeg.exe
-y -ss 30 -i = Arguments for ffmpeg.exe
"C:\Program Files (x86)\XBMC\scripts\Base De Datos\Movie.avi" = The path of the movie I want to use with ffmpeg.exe to make a thumbnail (argument for ffmpeg.exe)
-f mjpeg -vframes 1 -s 720x400 = More arguments for ffmpeg.exe
"C:\Program Files (x86)\XBMC\scripts\Base De Datos\thumbnail.jpg" = The path for save the thumbnail.

我尝试了很多方法来制作缩略图,但在XBMC插件中似乎真的很复杂。我不能使用pyffmpeg,因为我无法在我的插件中导入这个模块,除非把它安装到操作系统中,而我的插件必须是可移植的。我可以使用PIL,但它只能处理图片的缩略图,而我需要处理视频的缩略图。

我知道一些Python模块可以在不出现命令提示符窗口的情况下调用进程,但这些模块依赖于其他模块,比如win32api,而我也无法导入它,原因和无法使用/导入pyffmpeg是一样的……所以我在尝试用这种“坏方法”,虽然用os.system可以工作,但我失去了对插件窗口的控制。如果有人知道其他用Python制作视频缩略图的方法,请告诉我。

还有一个问题是我的插件必须是跨平台的(至少支持Windows和Linux),所以这种方法并不够好,但对我来说可能是一个很大的进步。

非常感谢。

2 个回答

-1

这样做:

os.system(""C:\\Program Files (x86)\\XBMC\\scripts\\Base De Datos\\ffmpeg.exe" -y -ss 423 -i "C:\Program Files (x86)\XBMC\scripts\Base De Datos\Movie.avi" -f mjpeg -vframes 1 -s 720x320 -an "C:/Program Files (x86)/XBMC/scripts/Base De Datos/thumbnail.jpg"")

可以正常工作,但会把xbmc最小化,因为会弹出一个命令窗口,所以我尝试用os.spawnv来做同样的事情,但出现了错误。

0

根据这个链接,你需要把参数放在一个列表里:

os.spawnv(os.P_DETACH, "path\to\program.exe", ["arg1", "arg2", "arg3"])

撰写回答