Lancement script Python

Bonjour,

J’ai commencé à investiguer les scripts avec le plugin éponyme mais j’aurais besoin d’un coup de main pour commencer…
Je précise que j’ai beaucoup programmé pendant 20 ans, mais qu’ensuite, tout en restant très proche du domaine du développement logiciel, je n’ai plus codé une ligne en 30 ans (oui, je ne suis plus de la première jeunesse, même si j’ai commencé à coder très tôt :wink: )… donc je ne suis pas étranger à la chose, loin de là, sauf que les langages et les pratiques d’aujourd’hui sont très différentes de celles de l’époque…

Donc, j’ai essayé d’écrire un (tout) petit script en Python en m’appuyant sur les infos que j’ai trouvées ici et là. Voilà ce que ça donne :

Lorsque je le lance j’obtiens ce message d’erreur :

Bon, je suppose que la réponse n’est pas très compliquée, mais je ne parviens pas à la trouver, donc…
À l’avance merci de votre aide !
Bizniouf

Ben la ou tu as mis le code c’est pas bon, tu dois créer un fichier, y mettre le code et appeler ce fichier de code la ou actuellement tu as mis el code !

Bonjour,

Une fois le script déplacé dans un fichier, le prochain problème sera avec #message# et #title#; vous ne pouvez pas utiliser ces tags directement dans le script (python ne comprends pas ca)
Vous devrez les passer en arguments du script et les utiliser comme tels dans le script.

Regardez la doc et les autres sujets à propos du plugin (facile à trouver lorsque l’étiquette du plugin est mise sur le post, ce que je viens de faire pour votre post), votre question a déjà été répondue de nombreuses fois: Sujets avec l'étiquette plugin-script

1 « J'aime »

Ah okayyy !.. Merci à @Mips & toi

Bon, c’est très laborieux mais j’avance.
Par contre (sans parler de paramètres à passer pour l’instant…) je me retrouve à présent avec une erreur sur le module requests :

Erreur exécution de la commande [Communications][Message vocal][SetMessage] : Erreur sur python /var/www/html/plugins/script/data/Test.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/Test.py », line 3, in import requests ImportError: No module named requests

J’ai parcouru le forum et trouvé un post de Mips sur le sujet : Python . . Extention requests non installé .. Oui mais il est installé... :/

…mais où et comment puis je exécuter les commandes suivantes ? :
Python --version
Pip --version

…et un autre ici : No module named 'requests'

…mais où et comment puis-je lancer la commande ? : sudo apt install python3-requests

Désolé pour ces questions…
@+
Bizniouf

Ce sont des commandes linux a passer en ssh

Il faudrait la page santé jeedom (toujours la fournir lors d’une question, cela sert chaque fois) car en fonction de la version de debian la réponse va changer

Ah oui… Voilà la page santé de mon Jeedom :

(Le plugin NOK est Jeedom Connect : Démon non lancé, mais c’est normal…)

Ah oui… je ne sais pas comment accéder à l’invite d’une ligne de commande sur ma box Atlas… sorry…

Ah si, je viens de voir ça dans la FAQ !..

Oui parfois la Doc peut servir a autre chose que bloquer un meuble bancale

Bon, j’ai téléchargé et installé PuTTY
Je me suis connecté sur ma Jeedom en SSH
Par contre « Python » et « Pip » il ne connait pas…
…et j’ose pas trop lancer le sudo sans être sûr au préalable de ce que je fais… pas envie de brayer ma box en faisant n’imp.
Des conseils ?
À l’avance merci !
Bizniouf

Bon… à défaut de parvenir à trouver confirmation de ce qu’il faut faire tout seul, j’ai demandé à ChatGPT… :innocent:

Il me répond qu’il faut utiliser Pip3 pour installer le module requests
…et comme Pip3 n’est pas installé sur mon système il me dit qu’il faut l’installer avec un sudo…
ça donnerait d’après lui :

sudo apt update
sudo apt install python3-pip
pip3 install requests

C’est bon, ça :thinking: ?.. j’ai pas super-confiance dans cet ami virtuel… :no_mouth:

Bizniouf

A mon avis, et pip3 et requests sont déjà présents
C’est 2 là sont tellement utilisés que je serais surpris du contraire.

Un peu tard pour les détails mais le problème est plus lié à python2 vs python3

Si le fichier est nommé .py jeedom va l’exécuter avec python2 (sous debian <=10, sous debian 11 ça sera python3)
Donc soit faut faire un script python2 et installer les dépendances pour (pas terrible car c’est pas le futur)
Soit faut tricher avec le nom du script et mettre .PY en majuscule (de mémoire)

Il y a d’autres posts qui parlent de ce soucis pour vérifier ce que je dis sinon je check demain ou mercredi.

J’avais bêtement pensé que la directive passée en tête de programme : #!/usr/bin/env python3
…permettait de sélectionner la version de Python…

Quoiqu’il en soit, en faisant la bidouille de renommer mon script « Test.py » en « Test.PY » j’obtiens un message d’erreur « Permission denied » :
Erreur exécution de la commande [Communications][Message vocal][SetMessage] : Erreur sur /var/www/html/plugins/script/data/Test.PY [Jeedom Atlas Message de test][Ceci est un test de message pour la commande SetMessage] 2>&1 valeur retournée : 126. Détails : sh: 1: /var/www/html/plugins/script/data/Test.PY: Permission denied

J’ai essayé un

réglage système configuration
onglet osdb
puis vérification générale

…trouvé dans un autre post. Le résultat ne semble pas suspect :
image

…mais la tentative d’exécution suivante n’est guère plus encourageante :

Erreur exécution de la commande [Communications][Message vocal][SetMessage] : Erreur sur /var/www/html/plugins/script/data/Test.PY [Jeedom Atlas Message de test][Ceci est un test de message pour la commande SetMessage] 2>&1 valeur retournée : 127. Détails : /usr/bin/env: ‹ python3\r ›: No such file or directory

Voilà mon petit programme :

Gloups… I’m sinking ! :sos:

Oui mais seulement si le script est exécuté lui même alors cette première ligne est même obligatoire.

Si on exécuté python en passant en argument le script (ce que fait jeedom) cette première ligne ne sert plus à rien puisqu’on est déjà dans python
Et sous debian <=10 python correspond à python2

Ah j’avais pas fait gaffe que le message d’erreur avait changé. On dirait qu’il ne trouve pas python3

Du coup fait

sudo apt update
sudo apt install python3 python3-pip
sudo python3 -m pip install requests

Ensuite

python3 --version 
pip3 --version 

Merci mille fois pour le temps que tu passes à m’aider, Mips !

(au passage je me pose mille questions à chaque fois. Par exemple, pourquoi autant de packages peuvent ils être upgradés ? Je viens d’acheter ma box. Elles ne sont pas livrées à jour des différents packages ?)

Merci de ton retour. Apparemment Python 3 était déjà installé :

…par contre le module requests n’y était pas :

Ça a l’air bon, mais je réessaie et voilà ce que ça me donne :

:face_with_thermometer: :sob:

Salut @Bizniouf,
Rétablit les droits jeedom sur les fichiers www-data dans _OS/DB
image

Bonjour cstan77,

Effectivement, voilà ce que j’ai observé :


=> pas de droit d’exécution sur mon script.

J’ai essayé mais ça n’a rien changé.

…mais en modifiant les droits sur mon script à la main :

…ça marche !.. enfin bon, je parviens à lancer mon script, pas encore à récupérer et exploiter les paramètres, mais c’est un autre problème…

De tout cela 3 questions subsistent :

1 - Comment faire pour que les droits d’accès aux scripts que je développe soient fixés par défaut de telle façon à ce que je puisse les exécuter ?

2 - Qu’est censé faire le rétablissement des droits jeedom sur les fichiers www-data dans _OS/DB et pourquoi ça n’a pas eu d’effet dans mon cas ?

3 - Y a-t-il un moyen de forcer le lancement de python 3 autrement qu’avec la vilaine bidouille qui consiste à nommer l’extension « .PY » en majuscules ? (perso je trouve que ça devrait être une option en clair du plugin script lui-même)

@+
Bizniouf

  1. comment as-tu créé le script?
    perso jamais eu ce genre de soucis mais les quelques scripts que j’ai ont été créé via la liste des commandes du plugin script, pas en ssh
    si tu as créé en ssh alors normal que www-data ne soit pas propriétaire du fichier

  2. aucune idée pourquoi cela n’a pas eu d’effet

  3. non, excepté installer debian 11 => lorsque le plugin voit que le fichier à l’extension .py (lowercase) alors il execute python [le_script.py] et le symlink python dépend de la version de l’os/python
    on pourrait avoir une option dans le plugin mais ca aurait du être fait il y a des mois/années; à présent ca ne vaut plus vraiment la peine car dans quelques mois tout le monde sera sur debian 11 et donc python3 par défaut, le problème va disparaitre tout seul

Bonjour Mips,

Ah, hé bien je n’avais dans un premier temps pas vu qu’on pouvait éditer un fichier directement depuis l’interface web de Jeedom, alors j’ai créé un fichier avec un éditeur sur mon PC, puis je l’ai uploadé avec l’interface web de Jeedom.

Okay. C’est pas propre, mais comme c’est provisoire…

Encore merci pour ton aide !
@+
Bizniouf