Log d'un script python

Bonjour,

Via Ajax, je lance un script Python tous comme mon démon. J’aimerai pouvoir transettre les logs du script a Jeedom ?

Script Ajax :

    $command = system::getCmdPython3(__CLASS__) . ' ../../resources/ProJoted/LoginConnect.py';
    $command .= ' ' . escapeshellarg($url);
    $command .= ' ' . escapeshellarg($login);
    $command .= ' ' . escapeshellarg($password);
    $command .= ' ' . escapeshellarg($ent);
    $command .= ' ' . escapeshellarg(log::convertLogLevel(log::getLogLevel(__CLASS__))); // transmettre les LOGS

Dans le script Python, j’ai cela :

    Pronote_url = str(sys.argv[1])
    Username = str(sys.argv[2])
    Password = str(sys.argv[3])
    Ent = callable(sys.argv[4])
    Log_level = str(sys.argv[5])

    jeedom_utils.set_log_level(Log_level)
    logging.info("Démarrage du script Python")

Où me suis je trompé ?

Salut,

C’est pas de un call ajax ca. Que veux-tu dire par ajax?

Sinon pour les logs d’un démon, regardes le plugin template et/ou la doc dev, c’est dedans avec exemple

J’essaye d’exécuter un script python depuis le PHP de mon plugin.
Si cela se trouve c’est pas possible en dehors du deamon.

si c’est possible mais donc c’est pas un call ajax qui est un appel depuis ton code javascript (frontend) vers ton backend

pour avoir le log tout dépend commen tu gères dans ton code python mais donc une technique parmi d’autres est de rediriger la sortie vers ton fichier log, c’est celle documentée et c’est donc pour ca que je te disais de lire la doc

Ok je vais voir ce que je trouve dans la documentation du plugin.
J’ai repris la configuration du plugin python mais cela ne marche pas et je sais pourquoi.

Je ne dois pas connaitre suffisamment ajax.
Mais je pense que tu parles de la réquête depuis le javascript :

$.ajax({
type: « POST », // Méthode de transmission des données au fichier php
url: « /plugins/ProJote/core/ajax/ProJote.ajax.php », // URL du script PHP AJAX
data: {
action: « Validate », // Action à exécuter dans le script PHP
url: Url,
login: Login,
password: Password,
ent: CasEnt,
nomeleve: NomEleve || « Inconnu »
},
dataType: ‹ json ›,
global: false,
error: function (request, status, error) {

mais c’est toi qui parlait d’ajax :upside_down_face:
et ensuite ce que tu montrais n’était pas un call ajax
et ce que tu veux faire n’est pas un call ajax…

donc je pense que tu peux oublier cette histoire d’ajax … ou alors je ne comprend plus rien
tu ne pourras pas appeler un script python sur jeedom juste avec un call ajax

Force est de constater que je ne suis pas clair.
Je vais donc rétirer ma demande :
Dans mon plugin Projote, j’utilise « Projote.ajax.php » pour éxécuter un script Python « LoginConnect.py ».
J’aimerais que dans le script python, les logs soient retransmis dans le système de Log de Jeedom.

1 « J'aime »

Bonsoir,

Question : dans ton plugin, tu as un démon python qui tourne ou bien ton plugin est full php ?

TiTidom.

J’ai plugin avec un deamon python qui marche.
Mais je souhaite exécuter à part d’autre script python et transmettre le log dans le log du plugin.

Et simple question : pourquoi ne pas envoyer à partir de Jeedom à ton démon, une commande pour lancer ce script python, et mettre ce script dans une fonction de ton démon et le lancer lors de la réception de l’ordre par Jeedom ?

Ainsi, tu pourras profiter du démon qui tourne déjà, lancer ton script dans un thread à part même si tu ne veux pas qu’il bloque ton démon pendant son execution et renvoyer ensuite les résultats de ton scripts à Jeedom, puisque c’est déjà prévu par le template de démon python jeedom ??

TiTidom.

1 « J'aime »

PArce que je débute et ue je ne sais pas gérer les threads. le plus simple était donc de réexécuter un nouveau script.

Donc je me répond :
Pour que le log soit redirigé vers les logs de Jeedom, il faut que j’ajoute à la fin la ligne :

$command .= ' >> ' . log::getPathToLog(ProJote) . ' 2>&1 &';

Cela apporte le résultat souhaité

Pas du tout ce que je disais…

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.