Page 1 sur 1

Trigger lancement d'un script Python3

Posté : sam. 23 avr. 2016 22:01
par silver-slider
Bonsoir,

j'ai lu pas mal de choses et leurs contraire aujourd'hui, certains exemples que je n'ai pas reussi a adapté ( ca c'est pas trop étonnant ) mais avant de m'arracher les cheveux, ou du moins le peu qu'il en reste, j'ai une question existentielle:
- peut on lancer un script Python grâce a un Trigger sur un table MySQL ?

En fait j'aurai aimé pouvoir lancer un script de récupération de données (et conversion en csv) lorsque les données arrivent dans la table... j'avais trouvé ce modèle de Trigger :

Code : Tout sélectionner

DELIMITER $
CREATE TRIGGER Test_Trigger
AFTER INSERT ON SFCRoutingTable
FOR EACH ROW
BEGIN
DECLARE cmd CHAR(255);
DECLARE result int(10);
SET cmd = CONCAT('python /home/triggers.py');
SET result = sys_exec(cmd);
END;
$
DELIMITER ;
coté SQL pas de soucis, mais j'ai jamais pigé comment récupérer l'évènement pour lancer le script :(
il me semble avoir compris qu'il fallait installer cette lib lib_mysqludf_sys mais je ne sais pas ce que ca vaut ?!

Dur.. dur.. d'être un boulet..

Je m'étais résigné a opter pour la solution de créer un cron pour déclencher le script toutes les x minutes, mais quand même j'aimerai bien comprendre ce système car il me parait plus "logique"...

d'avance merci pour vos réponses

Re: Trigger lancement d'un script Python3

Posté : dim. 24 avr. 2016 17:41
par bruno83
Coucou,
tape
mysql select version
Il faut > 5.2.0
puis avec phpmyadmin dans variables
mettre on sur event_scheduler
event.png
event.png (1.91 Kio) Vu 1675 fois
pas besoin de librairie. ;) aucun souci d'installation
J’ai utilisé le déclencheur d’évènement mais pour exécuter des requêtes mysql , exemple dans notre station météo on efface les données de plus d’un ans ,qui ressemble à un Cron interne (très gourmand en ressource sur un B+ le serveur mysql devenu plus lent) vaut mieux le Cron externe mais jamais un script python ,ça doit être possible .
Si ton événement est non périodique, un cron est inutile, tu peux effectuer différemment ta tâche, en plus simple le script qui remplis ta table lance un autre script à la fin pour gérer tes conversions.
Si c’est pour un serveur externe ou bien ton serveur apache couplé avec ton serveur mysql faire une socket avec une requête GET et gestion avec une page en php par exemple.
Aussi simple avoir deux processus indépendant sur la même machine qui partage de la RAM commune voir l’article que j’ai écrit ici sur framboise315 htm5 et python avec PHP.
Si ton client est web et que c’est lui qui décide le moment de la conversion (il veut visualiser le fichier par exemple) de l’ajax est très utilisée.
A+bruno

Re: Trigger lancement d'un script Python3

Posté : mar. 26 avr. 2016 08:36
par silver-slider
Bonjour Bruno,

Mon soucis c'est que ce qui rempli la table c'est la réception d'un SMS, difficile de récupérer une autre info, il me semble que ce n'est qu'en effectuant un contrôle régulier de la table ou en utilisant un Trigger que c'est possible ( Enfin a mon niveau de compréhension en tout cas ) j'ai pas reussi a déclencher le script avec le trigger, si doit le faire simplement comme ca, directement, je vais chercher, j'ai du me planter qq part ..
Je doute pas qu'il y est plein de solution "plus techniques" a mettre en oeuvre, mais j'essaie de faire avec celles ou j'ai un peu de connaissance... et vue l'étendue de celles-ci, effectivement, je suis limité dans les possibilités ;)

en tout cas merci ;)

Re: Trigger lancement d'un script Python3

Posté : mar. 26 avr. 2016 20:39
par bruno83
Bonjour,
Il y a quelque chose que je ne comprends pas si c’est un simple trigger (par un into). es-tu sur deux machines différentes ? un client extérieure écrit sur la table, le serveur MYSQL déclenche un processus mais si tu es sur la même machine je ne vois pas l’utilité d’un trigger sauf pour un évènement temporel avec event_scheduler.
Si tu gères ton gsm en python, exemple avec la liaison série asynchrone GPIO( avec un module gsm et commande AT) ,lors de la réception (en supposant que tu as une boucle infinie qui attend ton message) tu peux lancer ton script sans passer par ta base de données puis que ton gsm est sur la même machine.
A+bruno

Re: Trigger lancement d'un script Python3

Posté : jeu. 28 avr. 2016 07:35
par silver-slider
Bonjour,
Tout le "problème" vient de là Bruno c'est deux machines différentes ;)
j'ai pas trop le temps de tester en ce moment, mais si le trigger into est sensé lancer mon script, alors il le fera ou il devra dire pourquoi :twisted:

Re: Trigger lancement d'un script Python3

Posté : dim. 1 mai 2016 10:46
par silver-slider
Bon et bien j'arrive a rien... quand je crée le Trigger ma table ne se remplie même plus :roll:
bruno83 a écrit : Si tu gères ton gsm en python, exemple avec la liaison série asynchrone GPIO( avec un module gsm et commande AT) ,lors de la réception (en supposant que tu as une boucle infinie qui attend ton message) tu peux lancer ton script sans passer par ta base de données puis que ton gsm est sur la même machine.
C'est pas idiot, mais hélas je dois attendre que ces données soient insérés dans la table pour générer un csv... la base de données faisant quand même "tampon" en cas d'arrivées multiples et simultanées...