Variables disponibles

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
phdenaujan
Messages : 63
Enregistré le : lun. 5 janv. 2015 21:29

Variables disponibles

Message par phdenaujan » lun. 2 mars 2015 22:48

Bonsoir,

Excusez-moi si je n'utilise pas les bons termes, je débute...

Je crée un fichier .txt par l’intermédiaire d'une page PHP (saisie de valeurs par l'utilisateur depuis une page html) : ça fonctionne
Ce fichier me sert de base pour faire tourner un script python (je lis chaque ligne du fichier et l'attribue à une variable : ça fonctionne

Le problème : ça oblige à ouvrir et fermer un fichier en boucle pour vérifier qu'aucune variable n'est mise à jour, ça ne me semble pas être une façon trés élégante de faire.

Est-il possible de créer des variables disponibles par n'importe quel autres scripts ? Variables qui serait placées, par exemple en mémoire, à chaque sollicitation de la page PHP de la manière suivante :

- Mise a jour du fichier .txt (ça, je gère),
- Lancement d'un script python depuis la page PHP (ça, je gère également)

Pour le script python qui crée les variables, là je bloque !
Ph.

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Variables disponibles

Message par vague nerd » mar. 3 mars 2015 07:12

Bonjour.

Vous vous débrouillez en python et en shell unix ?
Au vu de la nature de vos questions (recherche de l’élégance en plus de l'efficience), et en particulier ces pojnts :
- vérifier qu'aucune variable n'est mise à jour... élégamment
- variables disponibles par n'importe quel autres scripts ... par exemple en mémoire
je vous propose l'architecture technique suivante.

Un premier programme (script sh, python...) scrute en permanence le fichier pour le placer en mémoire (une fois les données structurées).
Tout autre script/programme peut communiquer avec le premier pour obtenir les informations nécessaires, au travers d'un pipe en local (une fifo par exemple), au travers d'une socket en distant.

Dites moi si c'est clair, et cette solution vous convient.
Certains concepts sont des concepts "avancés" (comme pipe ou socket). Néanmoins, ils ne sont pas si compliqués à mettre en oeuvre. Et on peut vous aider !

Cdt.
Cordialement,

Vague Nerd

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Variables disponibles

Message par Manfraid » mar. 3 mars 2015 09:32

Pour moi le plus simple est encore de passer par une base de donnée commune au 2 script
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

phdenaujan
Messages : 63
Enregistré le : lun. 5 janv. 2015 21:29

Re: Variables disponibles

Message par phdenaujan » mar. 3 mars 2015 17:17

Bonjour,

@Manfraid : Base de données commune : c'est actuellement le cas, la base de données étant un fichier .txt . Ça fonctionne bien, malgré tout je me demande si une solution plus économe que de recharger le fichier (ouvrir, lecture, fermeture) n'est pas possible

L'idée est de charger ces informations en mémoire que lorsqu'elles sont réellement modifiées par exemple en cliquant sur OK via une commande exec placée dans une page PHP.

Par exemple de saisir une valeur X qui serait enregistrée dans un fichier .txt.
Un script python (lecture.py) lit cette valeur dans le fichier, la stocke en mémoire (exemple : x=1)
Un second script, qui tourne en boucle par l’intermédiaire d'un fonction "while True :" imprime la valeur de x.

Puisque chargé en mémoire, x serait alors disponible depuis n'importe quel autre script l'appelant.

Un solution alternative serait, par exemple, de lancer la lecture du fichier que lorsqu'un GPIO passe à 1 (mise en oeuvre aisée mais j'optimise le processus au détriment d'une pin). Ça impose également de saisir dans chaque script le code permettant d'attribuer les valeurs lues (1 à x). Lorsqu'il y a beaucoup de lignes dans le fichier, ou même que l'on en ajoute, cela devient source d'erreur.

@vague nerd : Je débute, mais je suis persévérant (je me concentre pour le moment sur python, les autres langages viendront peut-être après). "Pipe" en local, "fifo" sont des termes que je ne connais pas encore. Je vais faire des recherches mais si vous avez un peu de temps à m'accorder, c'est avec plaisir.

Merci de votre intérêt,

Cordialement,
Ph.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Variables disponibles

Message par Manfraid » mar. 3 mars 2015 18:19

je parlais d'une vrai base de donnée car la si tes 2 script ouvre le fichier au même moment tu peu avoir un soucis. ensuite si un seul lit et seul l'autre écrit, c'est vrai que l'idée du pipe ma parait le mieux.

sinon c'est vrai qu'un serveur en socket pur peu être une bonne idée aussi mais la c'est peu être un peu plus compliquer a mettre en oeuvre

ensuite autre question pourquoi doit-tu essayer de passer des variables d'un script php a un script python car c'est quand même un poil tiré par les cheveux
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

phdenaujan
Messages : 63
Enregistré le : lun. 5 janv. 2015 21:29

Re: Variables disponibles

Message par phdenaujan » mar. 3 mars 2015 18:49

Je passe mes variables PHP à python parce que la page PHP est une extension d'un projet déjà en fonctionnement . De plus, les données recueillies via PHP peuvent également l'être par des saisies, complétées, modifiées en éditant le fichier ou par les programmes python les utilisant. En fait, à l'origine du projet, les données étaient recueillies par une suite de saisies faites par l'intermédiaires d'un script configuration.py.

Ensuite, je ne (et sans mauvais jeu de mots) pipe rien à PHP (je suis monotâche et ai redécouvert la programmation seulement depuis janvier - redécouvert parce que je bricolais en basique au temps jadis)

A priori, il ne devrait pas y avoir de problème si le fichier est ouvert en lecture (uniquement) simultanément. Qu'en panses-tu ?
Modifié en dernier par phdenaujan le mar. 3 mars 2015 18:55, modifié 1 fois.
Ph.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Variables disponibles

Message par Manfraid » mar. 3 mars 2015 18:53

normalement il ne devrait pas y avoir de soucis, mais je n'ais jamais été très chaud pour ce genre de chose. par contre comme c'est un fichier tampon, il faut qu'il soit créer en mémoire et non pas sur la SD sinon tu vas faire beaucoup de cycle d'écriture sur celle-ci
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Variables disponibles

Message par vague nerd » mar. 3 mars 2015 22:57

Bonsoir.

Je n'avais pas pensé à la base de données. C'est effectivement une bonne alternative.
Des bases comme MySql sont faciles à mettre en oeuvre, et surement moins compliquées à utiliser qu'une socket pour un débutant.

L'installation de la base de données elle-même ne représente qu'une commande tapée dans une console.

Si vous êtes inquiet de devoir vous colleter avec le langage SQL (le langage "générique" d'interrogation des base de données, pour faire simple), ne vous inquiétez pas plus que ça !
Imaginons que vous vouliez stoker un ensemble de clés/valeurs (x=10 et y=qqchose par exemple).
Création de la table (attention, il y a surement des soucis de syntaxes - je suis fatigué ! -, c'est juste pour illustrer) :

Code : Tout sélectionner

CREATE TABLE MESVALEURS (varchar laCle, varchar laValeur);
Insertion des lignes correspondant à x=10 et y=qqchose (toujours pour illustrer)

Code : Tout sélectionner

INSERT INTO MESVALEURS VALUE("x","10");
INSERT INTO MESVALEURS VALUE("y","qqchose ");
Lecture d'une des valeurs (ici, on cherche la valeur de x) :

Code : Tout sélectionner

SELECT laValeur FROM MESVALEURS WHERE laCle = "x";
De plus, des éditeurs comme PHPMyAdmin vont vous simplifier la tâche.

Cdt.
Cordialement,

Vague Nerd

phdenaujan
Messages : 63
Enregistré le : lun. 5 janv. 2015 21:29

Re: Variables disponibles

Message par phdenaujan » jeu. 5 mars 2015 21:54

J'ai installé l'ensemble, je n'ai plus qu'à m'y pencher. Je vous tiens au courant des avancées.
Encore merci pour les infos.

Cordialement,
Ph.

Répondre

Retourner vers « Python »