2010-09-26 5 views
0

Im travaillant dans un plugin Python pour XBMC (xbmc.org) et je veux exécuter un programme (ffmpeg.exe) à partir de mon plugin sans la fenêtre cmd apparaît. Si j'utilise os.system() pour appeler ffmpeg.exe fonctionne bien mais le xbmc minimise parce que os.system ouvre une fenêtre cmd quelques secondes. Donc, j'essaie d'utiliser os.spawnv() que je pense que c'est possible qui me permet d'appeler ffmpeg.exe sans fenêtre cmd apparaît. Le problème est que je sais comment utiliser os.system mais je ne sais pas comment utiliser os.spawnv. Im essayant, mais ne marche pas le travail:Python: Comment utiliser os.spawnv avec beaucoup d'arguments?

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. 

J'essaie beaucoup de méthodes pour faire une miniature mais son me semble qu'il est vraiment compliqué dans un plugin XBMC, je ne peux pas utiliser pyffmpeg parce que je ne peux pas importer le module de mon plugin sans l'installer dans SO et mon plugin doit être portable, je pourrais utiliser PIL mais seulement faire des miniatures d'images et j'ai besoin de faire des miniatures de vidéos. Je connais certains modules en python qui me permettent d'appeler processus sans fenêtre cmd apparait mais dépend d'autres modules comme win32api que je ne peux pas importer pour les mêmes raisons que je ne peux pas utiliser/importer pyffmpeg ... donc je trier le "mauvais" cette méthode, avec os.system fonctionne mais je perds le contrôle de ma fenêtre de plugin. Si quelqu'un sait d'une autre façon de faire une vignette d'une vidéo en utilisant python, s'il vous plaît dites-moi. L'autre question est que mon plugin doit être multiplateforme (Win et Linux au moins) donc ce n'est pas assez bon mais ça pourrait être un grand pas pour moi.

Merci beaucoup.

+0

Quelle version de python utilisez-vous? Pour les versions récentes, l'approche préconisée consiste à utiliser le module 'subprocess'. – llasram

Répondre

0

Comme par http://docs.python.org/library/os.html#os.spawnv, passer les arguments dans une liste:

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

Merci, mais j'essaie: os.spawnv (os.P_DETACH, "C: \ Program Files (x86) \ XBMC \ scripts \ base de données \ ffmpeg.exe", ["-y", "-ss" , "30", "-i", "C: \ Program Files (x86) \ XBMC \ scripts \ base de données \ Movie.avi", "-f", "mjpeg", "-vframes", "1" , "-s", "720x400", "-an", "C: \ Program Files (x86) \ XBMC \ scripts \ Base de données \ thumbnail.jpg"]) Et ne fonctionne pas: ERREUR: Exception dans le script Python onAction – GerarLM

+0

Qu'est-ce que onAction? Avez-vous une trace de pile d'exception? Est-ce qu'il pointe vers la ligne où vous utilisez spawnv, ou ailleurs? Est-ce que spawnv fonctionne à partir d'un script Python autonome? – Ray

+0

onAction est parce que la ligne im using spawnv s'exécute quand je clique dans un buton de mon plugin. L'erreur est seulement dans cette ligne, toute autre chose. – GerarLM

0

De cette façon:

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

fonctionne très bien, mais minimise XBMC car pop une fenêtre cmd, donc Im essayant de faire la même en utilisant os.spawnv mais me donne une erreur.