partager une variable entre deux scripts

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

partager une variable entre deux scripts

Message par estelle » lun. 19 févr. 2018 18:12

Bonjour,

Je cherche à partager une ou plusieurs variables entre deux scripts Python sans passer par un fichier texte
Exemple:

script 1:
a = 5

Script 2:
Je veux récupérer la valeur de "a" du script 1

Qui à une solution ?
Merci d'avance

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: partager une variable entre deux scripts

Message par jelopo » lun. 19 févr. 2018 21:09

Bonjour,

Si les 2 scripts sont indépendants, utiliser un base nosql (memcached, Redis), ou un serveur mqtt (mosquitto) ?

A+

estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

Re: partager une variable entre deux scripts

Message par estelle » lun. 19 févr. 2018 22:01

C'est lourd à gérer et autant que les fichiers texte
Il doit certainement une solution plus simple
A+

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

Re: partager une variable entre deux scripts

Message par Manfraid » mar. 20 févr. 2018 08:27

malheureusement comme dit jelopo, les script s'ils sont lancer chacun de leur coté il est impossible d'échanger des variables entre les script sans passer par un système externe
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.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: partager une variable entre deux scripts

Message par Bud Spencer » mar. 20 févr. 2018 09:26

Les solutions ne manquent pas.
Tu peux soit faire du partage de mémoire (shared memory) si tu veux vraiment partager des valeurs de variable (attention aux synchros …) ou si c’est plus pour de l’échange de donnée entre processus, tu peux aussi utiliser soit des canaux nommés (named pipe) ou alors des sockets (unix ou tcp). Dans une moindre mesure il y a aussi les sigusr. A toi de te documenter sur tout ça et choisir ce qui correspondra le mieux à ton besoin.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: partager une variable entre deux scripts

Message par jelopo » mar. 20 févr. 2018 21:41

Bonjour,
il y a aussi le module pickle natif sous Python.

A+

nexen
Raspinaute
Messages : 175
Enregistré le : lun. 29 sept. 2014 13:58

Re: partager une variable entre deux scripts

Message par nexen » jeu. 22 févr. 2018 17:18

bonjour,

Moi j'utilise un fichier XML ....

simple et la lecture/écriture est native en Python, php ...

C'est moins lourd qu'un pipe ou une base machin ;)

@+

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: partager une variable entre deux scripts

Message par Bud Spencer » jeu. 22 févr. 2018 22:37

nexen a écrit :Moi j'utilise un fichier XML
...
C'est moins lourd qu'un pipe ou une base machin ;)
Surement pas !

J’ai beau relire la question du po, et je pense interpréter correctement. Partager une ou plusieurs variable entre 2 scripts python, ça sous-entend pour moi que ces 2 script tourne simultanément et que les valeurs de ces variables sont susceptible de changer. Donc non, aucun type de fichier ne permet de partager des valeurs de variable entre process et j’ajouterais que si on doit utiliser cette méthode faute de compétence pour faire autrement, on choisit autre chose de plus léger que l’xml.

Exemple : Tu as 50 valeurs susceptibles de changer et une seule change. Tu es obligé de réécrire l’ensemble des 50 valeurs que tu devras aussi relire en intégralité de l’autre côté (et bien sûr d’évaluer pour savoir laquelle a changer …). Ça, oui c’est lourd

Si tu as une seule valeur d’un octet à échanger tu vas écrire des dizaines (centaine…) d’octets juste pour ça à chaque fois et en relire autant de l’autre côté pour l’extraire. Ça aussi c’est lourd

Si tes valeur change rapidement (disons quelques dizaine de fois par seconde) tu vas mettre ton fichier a jour à chaque fois ? Là, c’est très très lourd et je ne parle même pas de récupérer les données dans l’autre process …

Quand une donnée change, tu fais comment pour le savoir dans l’autre process ? Tu fais un pool de lecture dans une boucle infernal en en mettant des trycatch pour bypasser les erreurs d’accès conçurent ? C’est généralement le model utilisé ici, mais c’est plus de la lourdeur …

Un pipe ou un socket transmet des données à la vitesse de la lumière comparé à une écriture/lecture de fichier et en utilisant infiniment moins de ressources. Tout ça en permettant d’être à l’écoute des changements de façon totalement transparente et de déclencher des évents si besoin. Ca ce n’est pas lourd du tout, c’est juste natif au niveau de l’os et dispo très facilement en python. Faut juste apprendre ce que c’est et comment ça marche et ça non plus ce n’est pas si lourd que ça.
Modifié en dernier par Bud Spencer le ven. 23 févr. 2018 11:38, modifié 1 fois.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

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

Re: partager une variable entre deux scripts

Message par Manfraid » ven. 23 févr. 2018 08:12

Sinon la dernière possibilité ne serai pas d'essayer de réunir les 2 script en un seul
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.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: partager une variable entre deux scripts

Message par Bud Spencer » ven. 23 févr. 2018 11:34

Manfraid a écrit :Sinon la dernière possibilité ne serai pas d'essayer de réunir les 2 script en un seul
Tu as très certainement raison Manfraid. Sauf que dans la réalité, faute de savoir gérer du multitasking, du multiprocessing et tout un tas d’autres malédictions, les débutants résolvent souvent leurs problématiques en écrivant plusieurs petits programmes différents qu’ils font tourner simultanément. Tant qu’aucune ressource ou donnée n’est partagée et qu’il ni a pas de priorité de charge à donner à certains process plus qu’à d’autres, ce n’est pas vraiment problématique et je dirais même que ça peut permettre de faciliter la maintenance des scripts qui sont forcément plus ‘petit’ et moins complexe qu’un seul ‘gros’ code. Par contre, s’il y a des besoins de partage ou des ressources commune, c’est plus du tout la même. C’est généralement à ce moment-là ou les petits scriptounet ont besoin de grandir pour devenir un vrai programme et pour ça, il faut obligatoirement élever son niveau de programmation, sinon, on fait forcement de la m*****.

Ceci dit, le partage entre process est aussi souvent utile voir nécessaire. C’est la que les pipe et les sockets deviennent magique. Faire dialoguer 2 process (ou plus) au travers de sockets est très simple à réaliser en python (quelques lignes de code seulement). Ce qui peut devenir plus complexe, c’est de bien gérer la synchronisation des échanges parce que fatalement, si on veut faire plusieurs choses simultanément, on en revient à du multiprocessing, de la programmation parallèle et de la gestion d’évènement. Donc finalement, avec un seul ou plusieurs programmes ont en revient au même et la barrière à franchir est la même dans les 2 cas.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Python »