Adresse ip sous forme de variable
Résolu/Fermé
BlackFlag
-
Modifié le 7 avril 2021 à 18:57
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 12 avril 2021 à 15:02
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 12 avril 2021 à 15:02
A voir également:
- Localiser adresse ip python
- Ethernet n'a pas de configuration ip valide - Guide
- Darkino nouvelle adresse - Guide
- Rechercher ou entrer l'adresse - Guide
- Localiser adresse ip gratuit - Guide
- Comment connaître son adresse ip - Guide
9 réponses
mamiemando
Messages postés
33093
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 mai 2024
7 752
Modifié le 7 avril 2021 à 19:00
Modifié le 7 avril 2021 à 19:00
Bonjour,
Le contenu de
Pour lire un fichier je te conseille d'utiliser le mot clé
Je n'ai pas non plus compris à quoi correspondait ta boucle for. Je t'invite donc à contrôler le contenu de ta valeur
Dernier point : réfléchis au format de ton fichier de configuration. Dans le cas particulier des fichiers
Bonne chance
Le contenu de
toto.inimais généralement, un fichier ini ne contient pas une valeur toute seule.
Pour lire un fichier je te conseille d'utiliser le mot clé
with(cf cours sur les context managers), c'est bien plus propre.
Je n'ai pas non plus compris à quoi correspondait ta boucle for. Je t'invite donc à contrôler le contenu de ta valeur
UDP_IPune fois que tu l'as chargée e.g. avec un
print(UDP_IP).
Dernier point : réfléchis au format de ton fichier de configuration. Dans le cas particulier des fichiers
.ini, il y a une syntaxe standard et donc un parseur python directement disponible (voir ce lien). D'autres formats de fichiers peuvent être considérés (e.g.
json). Personnellement je préfère les fichiers json mais ça c'est une affaire de goût.
Bonne chance
Salut Mamie :-)
Merci pour ta réponse, mais en fait la lecture du fichier ini fonctionne très bien ( j'ai mis un bout du code seulement pour simplifier la demande)
Donc mon fichier ini est bien parsé, la valeur de l'adresse ip est bien lue et mise dans la valeur de la variable.
Si je fais un print UDP_IP dans la console j'ai bien la valeur lue dans le fichier ini.
Sauf que quand je balance cette variable dans le sock.sendto elle n'est pas reconnue.
Alors que l'adresse est reconnue quand elle est codée en dur dans la mme variable .
Interresting ?
Merci encore.
BlackFlag
Merci pour ta réponse, mais en fait la lecture du fichier ini fonctionne très bien ( j'ai mis un bout du code seulement pour simplifier la demande)
Donc mon fichier ini est bien parsé, la valeur de l'adresse ip est bien lue et mise dans la valeur de la variable.
Si je fais un print UDP_IP dans la console j'ai bien la valeur lue dans le fichier ini.
Sauf que quand je balance cette variable dans le sock.sendto elle n'est pas reconnue.
Alors que l'adresse est reconnue quand elle est codée en dur dans la mme variable .
Interresting ?
Merci encore.
BlackFlag
mamiemando
Messages postés
33093
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 mai 2024
7 752
8 avril 2021 à 19:07
8 avril 2021 à 19:07
Bonjour,
Peux-tu partager un script python minimal et le fichier ini correspondant qui met en évidence le problème ? Car une chaîne, c'est une chaîne :-) Et si à la sortie du parser, la chaîne contient la même valeur que celle que tu as codée en dur dans ton exemple, il n'y a pas de raison que le comportement soit différent. Tu peux en outre rajouter une assertion pour vérifier si la chaîne parsée contient bien la valeur attendue le temps de déboguer, comme par exemple :
Bonne chance
Peux-tu partager un script python minimal et le fichier ini correspondant qui met en évidence le problème ? Car une chaîne, c'est une chaîne :-) Et si à la sortie du parser, la chaîne contient la même valeur que celle que tu as codée en dur dans ton exemple, il n'y a pas de raison que le comportement soit différent. Tu peux en outre rajouter une assertion pour vérifier si la chaîne parsée contient bien la valeur attendue le temps de déboguer, comme par exemple :
assert UDP_IP == "192.168.18.224"
Bonne chance
Bonjour Mamiemando,
Ok, je vais extraire un bout de code pour que tu puisses analyser le truc. C'est vrai que je trouve ça curieux aussi.
L'assert renvoie une erreur, alors que le print renvoie la bonne valeur.
Je pense que c'est une histoire de format, par exemple quand je code l'adresse en dur :
Il y a les "" encadrant l'IP et ça marche.
Mais quand je le chope dans l'ini, même en ecadrant l'adresse avec des " dans l'ini...pas glop.
Je met le bout de code dans un second post.
En tout cas merci pour ton aide.
Alain
Ok, je vais extraire un bout de code pour que tu puisses analyser le truc. C'est vrai que je trouve ça curieux aussi.
L'assert renvoie une erreur, alors que le print renvoie la bonne valeur.
Je pense que c'est une histoire de format, par exemple quand je code l'adresse en dur :
UDP_IP = "192.168.18.224"
Il y a les "" encadrant l'IP et ça marche.
Mais quand je le chope dans l'ini, même en ecadrant l'adresse avec des " dans l'ini...pas glop.
Je met le bout de code dans un second post.
En tout cas merci pour ton aide.
Alain
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re-Bonjour Mamie,
Pour tester le code UDP, je conseille l'utilitaire UDP sender/receiver gratos sur le WinStore et qui marche nickel.
Voici le bout de code :
Et voici le contenu du fichier toto.ini :
Bonne chasse ! et merci d'avance.
Alain
Pour tester le code UDP, je conseille l'utilitaire UDP sender/receiver gratos sur le WinStore et qui marche nickel.
Voici le bout de code :
import socket import sys UDP_IP = "192.168.18.224" # déclare variable adresse de destination et la fixe à .224 #Phase de récupérations des données du fichier ini (toto.ini) #Lit le fichier ini et prend la ligne 4 puis la transforme en la valeur de la variable fichier = open("toto.ini", "r") for i in range(4): UDP_IP = fichier.readline() fichier.close() print ("L'adresse IP est maintenant :" , UDP_IP) assert UDP_IP == "192.168.18.223" # commande debuggage pour vérifier si la valeur est ok # # UDP_PORT = 65535 # déclare variable port destination et la déclare arbitrairement à 65535 # Lit le fichier ini et prend la ligne 7 puis la transforme en la valeur de la variable fichier = open("ex-lpr.ini", "r") for i in range(7): UDP_PORT = fichier.readline() print (UDP_PORT) fichier.close() ENTETE_TRANSMISSION = "~" # déclare variable de début de transmission port A du Bidule FIN_TRANSMISSION = "end" # déclare variable de fin de transmission CODE_TEST = "123456" # déclare un numéro de truc pour test MESSAGE_3 = bytes(ENTETE_TRANSMISSION + CODE_TEST + FIN_TRANSMISSION, 'utf-8') print ("le message 3 est :", MESSAGE_3) # affiche me message concaténé dans la console sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.sendto ((MESSAGE_3), ((UDP_IP), int(UDP_PORT))) # int() est ajouté pour mettre la valeur du port en integer
Et voici le contenu du fichier toto.ini :
Je suis le fichier ini
Adresse IP du bidule ..../// mettre le valeur dans la ligne suivante
192.168.18.223
Port du bidule ..../// mettre le valeur dans la ligne suivante
65535
Bonne chasse ! et merci d'avance.
Alain
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
9 avril 2021 à 15:41
9 avril 2021 à 15:41
Bonjour,
merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
def test(): print('test') test()
Oups désolé je n'avais pas tout compris :-)
Je l'ai fait pour le code Python, par contre pour le contenu de l'ini j'ai laissé tel quel.
Pas encore habitué aux forums de codeurs, mais ça va venir !
Merci.
Alain
Je l'ai fait pour le code Python, par contre pour le contenu de l'ini j'ai laissé tel quel.
Pas encore habitué aux forums de codeurs, mais ça va venir !
Merci.
Alain
mamiemando
Messages postés
33093
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 mai 2024
7 752
Modifié le 12 avril 2021 à 02:28
Modifié le 12 avril 2021 à 02:28
Bonjour,
Si tu affiches le contenu de ta chaîne comme suit :
... tu verras que ta chaîne contient le retour à la ligne (\n).
La manière la plus simple de corriger ton script est la suivante :
Ceci dit, plusieurs choses ne vont quand même pas mais peut-être que ça n'est pas gênant pour toi, alors je les liste juste pour information :
Donc moi je ferais plutôt ceci :
où
Note l'absence de guillemets au niveau de la valeur associée à la clé "server_port" pour directement récupérer un entier et non une chaîne de caractère.
Bonne chance
Si tu affiches le contenu de ta chaîne comme suit :
print ("L'adresse IP est maintenant : %r" % UDP_IP)
... tu verras que ta chaîne contient le retour à la ligne (\n).
La manière la plus simple de corriger ton script est la suivante :
UDP_IP = UDP_IP.strip() print ("L'adresse IP est maintenant : %r" % UDP_IP) assert UDP_IP == "192.168.18.223"
Ceci dit, plusieurs choses ne vont quand même pas mais peut-être que ça n'est pas gênant pour toi, alors je les liste juste pour information :
- ton fichier ne respecte pas la syntaxe d'un fichier ini classique, du coup tu t'interdis d'utiliser un parseur de fichier ini sur étagère (voir la documentation) -- mais comme je le disais plus haut je préconise plutôt d'utiliser un fichier json.
- ça n'a pas vraiment de sens de nommer une variable UDP_IP, car une IP n'est pas associée à un protocole (ni un port d'ailleurs). Ce serait plus logique de nommer ces variables SERVER_IP et SERVER_PORT par exemple.
Donc moi je ferais plutôt ceci :
#!/usr/bin/env python3 import json from pprint import pprint with open("toto.json") as f: config = json.load(f) pprint(config) #server_ip = config["server_ip"] #server_port = config["server_port"]
où
toto.jsoncontient :
{
"server_ip" : "192.168.18.223",
"server_port" : 1234
}
Note l'absence de guillemets au niveau de la valeur associée à la clé "server_port" pour directement récupérer un entier et non une chaîne de caractère.
Bonne chance
Ah carrément top, merci ++ MamieMando !
Le "strip" marche nickel, quand au Json, je vais potasser car ça a l'air top.
Un petit peu d'histoire personnelle :
J'ai fait 1 mois de basic il y a ....42 ans ! Si si...
Et là, pour le boulot je replonge dans la programmation "lite". Bien entendu je l'ai fait bille en tête, total à l'arrache :-))
Il me semble donc urgent que je rentre dans un vrai processus d'autoformation.
En tout cas merci encore.
Alain
Le "strip" marche nickel, quand au Json, je vais potasser car ça a l'air top.
Un petit peu d'histoire personnelle :
J'ai fait 1 mois de basic il y a ....42 ans ! Si si...
Et là, pour le boulot je replonge dans la programmation "lite". Bien entendu je l'ai fait bille en tête, total à l'arrache :-))
Il me semble donc urgent que je rentre dans un vrai processus d'autoformation.
En tout cas merci encore.
Alain
mamiemando
Messages postés
33093
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 mai 2024
7 752
12 avril 2021 à 15:02
12 avril 2021 à 15:02
Bonjour Alain,
Ah le basic, ça ne nous rajeunit pas effectivement. Tu verras python c'est assez simple donc tu ne devrais pas avoir trop de difficultés. Il y a beaucoup de tutoriels/cours gratuits disponibles sur internet, et le forum n'est jamais bien loin pour les coups durs :-)
Bonne continuation
Ah le basic, ça ne nous rajeunit pas effectivement. Tu verras python c'est assez simple donc tu ne devrais pas avoir trop de difficultés. Il y a beaucoup de tutoriels/cours gratuits disponibles sur internet, et le forum n'est jamais bien loin pour les coups durs :-)
Bonne continuation