Page 1 sur 1

partager une variable entre deux scripts

Posté : lun. 19 févr. 2018 18:12
par estelle
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

Re: partager une variable entre deux scripts

Posté : lun. 19 févr. 2018 21:09
par jelopo
Bonjour,

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

A+

Re: partager une variable entre deux scripts

Posté : lun. 19 févr. 2018 22:01
par estelle
C'est lourd à gérer et autant que les fichiers texte
Il doit certainement une solution plus simple
A+

Re: partager une variable entre deux scripts

Posté : mar. 20 févr. 2018 08:27
par Manfraid
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

Re: partager une variable entre deux scripts

Posté : mar. 20 févr. 2018 09:26
par Bud Spencer
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.

Re: partager une variable entre deux scripts

Posté : mar. 20 févr. 2018 21:41
par jelopo
Bonjour,
il y a aussi le module pickle natif sous Python.

A+

Re: partager une variable entre deux scripts

Posté : jeu. 22 févr. 2018 17:18
par nexen
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 ;)

@+

Re: partager une variable entre deux scripts

Posté : jeu. 22 févr. 2018 22:37
par Bud Spencer
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.

Re: partager une variable entre deux scripts

Posté : ven. 23 févr. 2018 08:12
par Manfraid
Sinon la dernière possibilité ne serai pas d'essayer de réunir les 2 script en un seul

Re: partager une variable entre deux scripts

Posté : ven. 23 févr. 2018 11:34
par Bud Spencer
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.