Problème subprocess - Codec Video XVID

Bonjour,

Avec un premier script python j’essaie de lancer un deuxième script python qui permet de faire une acquisition d’image sur webcam et créer une vidéo à partir de ces images puis envoyer la vidéo sur un serveur
Le 2ème script seul fonctionne correctement, par contre quand je l’appel à partir du premier script là ça coince.

  1. Dans un premier temps j’ai réussi à faire fonctionner ce système mais en appelant un script simplifier qui prend juste une image. J’uti
    lise la commande subprocess.Popen() mais ça ne fonctionne que si je mets sudo python devant le fichier *.py à appeler, est-ce normal ? tous les exemples que j’ai trouvé n’avaient pas le « sudo python »

  2. En admettant qu’il faille mettre le « sudo python » , je le fais avec mon script complet et là pas d’erreur mais le second script ne tourne pas. J’ai testé en remplacant le subprocess.Popen par un subprocess.check_call
    J’ai alors « subprocess.calledprocesserror command sudo python…returned non-zero exit status 1 »
    A noter que quand je lance le second script tout seul, il tourne très bien.

  3. J’ai aussi essayer de lancer le script via une console en l’appelant via un sudo python. Ça me retourne:
    « fourcc = cv2.VideoWriter_fourcc(*‹ XVID ›) »
    "Attribute Error: ‹ module › object has no attribute ‹ VideoWriter_fourcc ›

Quelqu’un aurait une idée de ce qui peut clocher ?
Pour info, c’est la première fois que je fais du python et du raspberry.

EDIT: je viens de checker la version d’open cv2 que j’utilise, c’est la 3.4.4

Pour appeler de python à python on importe le fichier, puis on appelle ses fonctions. Popen c’est pour charger des programmes autres que Python.

Exemple

Fichier a.py

import b
b.f()

Fichier b.py

def f () :
   print "Hello"

Lancement

$ python a.py

A+

Bonjour,

Merci pour votre retour.
C’est dingue car on trouve des exemples avec des fichiers py qui sont lancés à partir de Popen.

Par contre avec l’exemple que vous citez, le fichier a.py qui appelle la fonction de b.py bloque pendant l’exécution de cette fonction non ?

Effectivement, ce n’est pas restrictif, il est donc possible de lancer aussi des scripts Python comme tous autre langage, mais dans ce cas l’interpréteur Python est lancé 2 fois. C’est utile par exemple si un programme a.py tourne sous Python2 et que le programme b.py tourne sous Python3.

Oui, mais je ne savais pas que c’était voulu. Dans ce cas, il faut s’orienter sur la programation paralèlle avec threading.
https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/2235545-la-programmation-parallele-avec-threading

Mais je suis conscient que ce n’est plus du niveau débutant.

A+

Bonjour,

J’ai effectivement réussi en utilisant des thread :slight_smile:

Du coup j’ai une autre question. Si je lance une fonction en tant que thread, cette fonction n’a pas de boucle infini elle se termine en quelques secondes, juste quelque ligne de code puis plus rien. Le thread existe-t-il encore bien qu’il n’exécute plus rien ? ou alors il existe encore et dans ce cas il faut le killer ?

En fait j’appelle cette fonction sous forme de thread périodiquement.

Bonjour,

A priori, lorsqu’il a fini son job, il libère les ressources utilisées.

A+