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
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
Salut,
Un script = un programme. Et partager des données entre programmes, c'est pas plus simple avec Python qu'avec n'importe quel autre langage car tous devront passer par des fonctionnalités système.
Par contre, un script peut aussi être "module":
fichier module_a.py
fichier script.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2a = 1
- W
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 import module_a print (module_a.a)
oui cela fonctionne mais pour mettre à jour la variable "a" de "fichier module_a.py" depuis "fichier script.py" ?
J'ai consulté les divers tutos qui sont très instructifs mais je n'ai trouvé réponse à mon problème par une méthode simple
La méthode décrite fonctionne bien avec des valeurs fixes et ainsi plusieurs scripts peuvent accéder à des constantes communes
Mais si l'on veut permettre aux scripts de modifier ces valeurs qui seront accessibles à tous, peut être que ce n'est pas la bonne méthode
Cela fonctionne bien avec les fichiers texte, DBB et peut être les pipes mais je ne connais pas ce mécanisme
Ces méthodes me semblent lourdes
Pouvez vous me donner une piste ?
A+
Une variable n'a de sens que dans un programme (Python ou autre).
Une donnée, c'est autre chose. Elle sera stockée à l'extérieur du programme sous la forme d'une suite d'octets. Et pour y accéder, le programme devra lire/écrire des octets vers... un fichier, une base de données, un serveur Web,...
Et oui, ces méthodes sont bien plus lourdes... puisque vous sortez du programme pour échanger avec un objet externe et que vous devez convertir une représentation interne (entier, flottant, chaine de caractères unicode,...) sous la forme d'une suite d'octets (qui pourront être relus par la suite).
- W
J'ai un doute mais je pense que @apicultrice souhaite faire de l'IPC.
Je pense en particulier à l'utilisation des sémaphores...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Je vois la chose très mal, car on rentre dans des concepts très techniques... Il faudra exprimer bien plus en détails ton problème. As-tu un cahier des charges ? T'as-t-on donné des directives ? As-tu des critères, des impératifs, ... ? Bref toutes les données pouvant aider à mieux te guider.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
J'ai deux scripts Phython 3 qui tournent sur un Raspberry PI et actuellement j'ai un échange d'infos entre les deux scripts par une sortie TOR
Un script fait monter une sortie du PI et l'autre script va lire l'état de la sortie
C'est un peu "tiré par les cheveux" comme méthodologie mais cela fonctionne.....
En plus c'est assez restrictif....
Je souhaiterai pouvoir passer des entiers, etc...
J'espère que c'est un peu plus clair
A+
Pourquoi ne souhaites-tu pas utiliser le fichier, une restriction particulière ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
C'est lourd et il y a un risque de perte de données
Dans le contexte, je suppose que "sortie TOR" = "sortie Tout Ou Rien".
Ben, il va vous falloir apprendre à utiliser pipes ou sockets (ou de la mémoire partagée). Et si la marche est haute, un peu de recherche sur Internet (ou dans les cours et tutoriels) devraient vous permettre de trouver tutos et exemples.
- W
Bonjour,
En plus de savoir faire de la communication inter-process, tu dois aussi établir un protocol de communication, car la phrase ci-dessus laisse supposer que tu veux passer différents type d'objets.
On pourrait peut-être te donner des pistes de simplifications si tu pouvais nous détailler cette partie là...
Pour l'instant, ce que l'on sait, c'est que tu as 2 processus (python) qui doivent communiquer ensemble, mais on ne sait pas dans quelles mesures:
Process1 envoie des données à process2 ?
Process1 attend des données de process2 ?
Les 2 s'envoient des données simultanément ou selon un certain contexte et donc non prédictif ?
Après, comment Process1 peut savoir quel type de données il reçoit de la part de Process2 (et vice-versa) ?
Quels risques de perte de données ?
Cordialement.
Bonjour
Je pense que tu mélanges beaucoup de choses.
Une variable est un outil qui permet à un programme de mémoriser des données pour les réutiliser. On ne lit pas des variables pour le simple plaisir de la lire, on utilise son contenu quand on en a besoin. Alors effectivement, chaque processus gère ses propres variables et deux variables qui ont le même nom dans les deux procesuss ne traitent pas forcément la même donnée. Et inversement.
Toi, ce que tu veux faire, c'est communiquer une (ou plusieurs) donnée(s) de p1 vers p2. Et pour ça, il faut passer par des outils dédiés à ce travail.
- Le premier c'est le bête fichier. p1 écrit des données et p2, vient les lire. Et p1 est sûr que la donnée a été lue, alors il peut écrire la suivante (au même endroit)
- Ensuite on a le tube, outil Unix/Linux. Ca se présente aussi comme un fichier sauf que là 1) les processus sont synchronisés par l'OS (l'écrivain est bloqué tant que l'écouteur n'est pas prêt à recevoir et inversement l'écouteur est bloqué tant que l'écrivain n'écrit rien) et la donnée lue est automatiquement supprimée du tube.
- Ensuite on trouve le fichier socket. Lui sa particularité c'est qu'on y accède via les protocoles réseaux (c'est à dire que quand on invoque ces protocoles, on peut leur passer soit une IP, soit le nom du fichier socket). Ensuite c'est presque comme le pipe: p1 écrit des trucs et p2 vient les lire ce qui les supprime. La seule différence c'est qu'il n'y a aucune synchronisation
- En remplaçant le nom du fichier par une adresse IP, on peut alors faire la même chose mais cette fois on passe par la pile TCP/IP. De même là non plus rien n'est synchronisé automatiquement
- Et enfin on a les IPC (Internal Process Communication). Ce sont des outils un peu plus poussés donc qui permettent de faire plus de choses (ou des choses différentes) mais qui demandent aussi plus de préparation. Il y a la "file de messages" (on place le message sur un fil imaginaire et il y reste tant que personne ne le lit) et la "share mémory" (une grosse map mémoire dans laquelle tous les processus qui y sont connectés peuvent écrire ou lire ce qui s'y trouve). Et pour pouvoir synchroniser les processus (éviter que 2 processus écrivent au même endroit) on peut utiliser des sémaphores (outils qui permettent de verrouiller/déverrouiller une ressource à la demande pour garantir sa possession unique à un instant T). La grosse différence des IPC par rapport aux outils précédents c'est que les données sont stockées en RAM mais quand-même protégées par l'OS et donc le processus qui les écrit peut très bien ensuite se terminer, les données restent présentes pour qui a envie de les récupérer. Mais un reboot et tout disparait.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Merci pour tes explications
Je suis novice en la matière car j'ai toujours utiliser dans l'industrie des outils "pré-machés" fournis par les fabricants d'automates programmables
Aujourd'hui à titre perso, j'essaie d'améliorer une système de gestion autonome de mon rucher.
Pour cela j'utilise un Raspberry PI en liaison Wifi longue distance avec mon domicile via une box et un site d'hébergement avec une BDD
En plus des contraintes en termes de surveillance d'essaimage de mes ruches, nous avons un nouveau problème liés au vol de ruches
Il a donc fallu rajouter en plus de la surveillance du poids des ruches , des protections contres les vols (accès coffret électrique par badge, caméra, etc...)
Pour cela j'utilise plusieurs scripts qui remplissent des tâches bien particulières mais qui doivent communiquer entre eux.
J'aurais pu utiliser mon PI en temps que serveur et utiliser une BDD local mais en cas de vol toute les données seraient perdues
J'ai donc opté pour une BDD distante
Les accès à la BDD sont gourmands en énergie et compte tenu que l'installation est alimenté par un panneau solaire toute les dispositions pour économiser l'énergie sont les biens venues
A+
Salut,
"plusieurs scripts" dans des processus séparés est un choix (ou la conséquence d'un non choix). Vous pourriez aussi envisager de réaliser les activités correspondantes via des threads (pour garder l'aspect asynchrone) et avoir un accès aux "variables".
Ces aspects physiques imposent des contraintes sur les choix possibles et la sélection du meilleur (ou des moins mauvais)... Et aussi sur les choix à faire côté réalisation. Et dans tout çà, Python n'est qu'un langage de programmation.
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager