IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Petit souci script telnet


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut Petit souci script telnet
    Bonjour,

    J'avais créé un script bash qui me permet de me connecter à un appareil, et le formater:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/usr/bin/expect -f
     
    set Username tel
    set Password tel
     
    spawn telnet 192.168.0.2
     
    expect "Username: "
    send -- "$Username\r"
     
    expect "Password: "
    send -- "$Password\r"
     
    send -- "\r"
    send -- "format a:\r"
     
    expect "Sure (Y/N) ? "
    send -- "Y\r"
     
    expect eof
    Il marche très bien, mais j'ai ensuite créé un script python pour copier des fichiers en FTP sur le matériel formaté... Pas de problème jusque là ...
    Je souhaiterais , dans un but de continuité, reprendre mon script telnet et le passer en python, j'ai donc pour ceci commencer un script mais celui-ci ne produit rien à l'écran et m'affiche une erreur...

    Le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import telnetlib
    import sys
     
    HOST = "192.168.0.2"
    USER = "tel"
    PASSWORD = "tel"
     
    telnet = telnetlib.Telnet(HOST)
     
    telnet.read_until("Username: ")
    telnet.write(USER + "\n")
     
    telnet.read_until("Password: ")
    telnet.write(PASSWORD + "\n")
     
    telnet.write("\n")
     
    telnet.write("format a:\n")
     
    telnet.read_until("Sure (Y/N) ?")
    telnet.write("y")
     
    telnet.close()
    Et quand je l'interromps car rien ne se passe, il m'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call):
      File "Format_PU.py", line 12, in <module>
         telnet.read_until("Username: ")
      File "/usr/lib/python3.5/telnetlib.py", line 302, in read_until
         i = self.cookedq.find(match)
    TypeError: a bytes-like object is required, not 'str'
    Je comprends qu'il ne veut pas de ma chaine de caractères ... Mais que dois-je utiliser pour faire potentiellement comme sur mon script en bash ?

    En vous remerciant de votre aide,

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu dois changer tes chaînes unicode en bytes.

    Ici, dans la doc, il y a un exemple:
    https://docs.python.org/3/library/te...telnet-example

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Salut,

    Merci pour ton aide.

    J'ai déjà fait comme l'exemple, ajouter les "b" avant et le ".encode('ascii') + b" dans le telnet.write mais j'ai quand meme un souci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Traceback (most recent call):
     File "Format_PU.py", line 15, in <module>
         telnet.read_until(b"Password: ")
      File "/usr/lib/python3.5/telnetlib.py", line 313, in read_until
         if selector.select(timeout):
      File "usr/lib/python3.5/selectors.py", line 376, in select
         fd_event_list = self.poll.poll (timeout)
    Et là, je ne sais pas trop ce que je peux faire...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par molochlebanni Voir le message
    Je comprends qu'il ne veut pas de ma chaine de caractères ... Mais que dois-je utiliser pour faire potentiellement comme sur mon script en bash ?
    Votre script fonctionnerait bien mieux sous Python2 comme indiqué dans le shebang #!/usr/bin/python.
    Or vous le lancez sous Python3 où "str" est devenu Unicode, par défaut, si on veut des "octets", il faut le demander!

    Vous avez à la fin de la documentation de telnetlib de Python3, un petit exemple qui fait a peu près la même chose que votre code en utilisant les constructions qui vont bien pour exprimer bytes sous forme littérale et qui montre l'usage d'encode/decode pour convertir des "str" en "bytes".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour wiztricks,

    Merci pour l’éclaircissement, je n'avais pas fait attention.

    Du coup dans le shebang je rajoute python3, c'est cela ?

    Par contre l'exemple me montre comment décoder, mais quand j'exécute le code, il ne se passe rien ...

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par molochlebanni Voir le message
    Merci pour l’éclaircissement, je n'avais pas fait attention.

    Du coup dans le shebang je rajoute python3, c'est cela ?
    Ce serait cohérent...

    Citation Envoyé par molochlebanni Voir le message
    Par contre l'exemple me montre comment décoder, mais quand j'exécute le code, il ne se passe rien ...
    Comme vous n'avez pas précisé de timeout, les wait_until vont attendre indéfiniment d'avoir reçu la chaîne de caractères passée en paramètres. Si elle est un peu différente, çà va attendre pour rien: le host ne va pas expédier plusieurs fois "password", il se contente d'attendre la réponse.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Ok, bon j'ajoute un timeout sur mes read_until, mais le script se lance et se referme ... sans erreur et sans avoir rien fait ...

    J'ai du mal avec ce script ...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par molochlebanni Voir le message
    J'ai du mal avec ce script ...
    Postez le script: ce n'est certainement plus le même que celui que vous aviez posté initialement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Voici le script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #usr/bin/python3
    #-*- coding: utf-8 -*-
     
    import telnetlib
    import sys
     
    HOST = "192.168.0.2"
     
    telnet = telnetlib.Telnet(HOST)
     
    telnet.read_until(b"Username: ", timeout=15)
    telnet.write(b"tel\n")
     
    telnet.read_until(b"Password: ", timeout=15)
    telnet.write(b"tel\n")
     
    telnet.write(b"\n")
     
    telnet.write(b"format a:\n")
     
    telnet.read_until(b"Sure (Y/N) ?", timeout=15)
    telnet.write(b"y")
    Celui ci est le dernier, sinon avant pour essai j'avais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #usr/bin/python3
    #-*- coding: utf-8 -*-
     
    import telnetlib
    import sys
     
    HOST = "192.168.0.2"
    user = "tel"
    password = "tel"
     
    telnet = telnetlib.Telnet(HOST)
     
    telnet.read_until(b"Username: ", timeout=15)
    telnet.write(user.encode('ascii') + b"\n")
     
    telnet.read_until(b"Password: ", timeout=15)
    telnet.write(password.encode('ascii') + b"\n")
     
    telnet.write(b"\n")
     
    telnet.write(b"format a:\n")
     
    telnet.read_until(b"Sure (Y/N) ?", timeout=15)
    telnet.write(b"y")
    En vous remerciant,

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Relisez la première ligne (i.e. le shebang)... Vous avez fait bien plus qu'ajouter un "3" à la fin!
    Quand vous avez ce genre de soucis, ouvrez un terminal et lancez le script avec "./script.py".
    Dommage qu'on ait passé des années à essayer de faire des messages d'erreurs intelligibles, si c'est pour ne pas avoir le temps de les lire!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Salut,

    ... Effectivement, quel boulet !!!! J'ai omis le "!" ... Forcément ...

    Cependant après modification, cela semble se connecter, mais quand je retourne dans mon matériel, rien n'a été formaté ....

    Je vais pleurer ... Je ne vois pas ce qui bloque, c'est frustrant...

    Peut-être un début de réponse avec l'image ici:

    Nom : 2018-04-20-112103_1920x1080_scrot.jpg
Affichages : 1159
Taille : 274,4 Ko

    Mais j'ai modifié avec la ligne complète, et rien de plus...

    Merci de votre aide,

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par molochlebanni Voir le message
    Cependant après modification, cela semble se connecter, mais quand je retourne dans mon matériel, rien n'a été formaté ....
    Si rien n'est formaté, c'est que:
    • la commande n'a pas été expédié,
    • la confirmation n'est pas reçue,
    • ou que ce n'est pas ainsi qu'il faut formater.

    il ne vous reste plus qu'à ajouter des "print" pour voir jusqu'où çà va et ce qui est reçu.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    oui je ne vois pas ce qui cloche ...

    Je pense qu'il y a un truc qui m'échappe au niveau du read_until ou du write, puisque la console me retourne quand même le Username: qu'elle devrait mais c'est ce "None" derrière je ne vois pas pourquoi il apparait ...

    Je vais essayer de creuser mais je pense que le problème est là ...

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par molochlebanni Voir le message
    Je pense qu'il y a un truc qui m'échappe au niveau du read_until ou du write, puisque la console me retourne quand même le Username: qu'elle devrait mais c'est ce "None" derrière je ne vois pas pourquoi il apparait ...
    Le None est le retour de l'appel ret2 = telnet.write(...); print(ret2).
    Avec un timeout, çà ne remonte pas d'exception, juste ce qui a été lu jusque là (éventuellement vide).
    Sans timeout, çà doit bloquer.
    Le soucis de votre script est qu'il continue tout droit, sans tester qu'il a obtenu le retour attendu avant de passer à l'instruction suivante.
    Dans un premier temps, vous devez ajouter des "print" pour voir ce que çà retourne quand çà part en timeout pour comprendre ce qu'il se passe et comparer ce que çà retourne lorsque vous avez reçu la chaîne de caractères attendue (ou pas) pour passer à la suite.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Le problème étant que je ne sais pas trop articuler ces fameux print ... Etant très grand débutant en python, je galère pas mal ... La façon dont je l'ai mis pour le moment vous semble correcte ? Ou je dois le faire autrement ?

    En vous remerciant,

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par molochlebanni Voir le message
    Le problème étant que je ne sais pas trop articuler ces fameux print ... Etant très grand débutant en python, je galère pas mal ... La façon dont je l'ai mis pour le moment vous semble correcte ? Ou je dois le faire autrement ?
    Les "print" ne servent qu'à afficher les informations reçues via .read_until(...) pour avoir une idée de ce qu'il se passe et comprendre quoi corriger. Dans votre exemple de code, il n'y en a pas assez pour comprendre jusqu’où çà va et ce que le serveur retourne (ou pas).

    Si vous aviez pris un chemin normal de l'apprentissage de la programmation, vous auriez appris à relire votre code, lui faire afficher des informations pour vous assurer qu'il fait bien ce que vous attendez sur des codes de bases bien plus faciles à comprendre que de la programmation réseau (qu'on apprend normalement après la programmation séquentielle et après la programmation événementielle). Vouloir prendre des raccourcis, c'est galère, j'en conviens mais peut être que l'aventure vous permettra de reconsidérer le temps qu'il faudrait consacrer à apprendre à programmer avant de galérer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Je suis entièrement d'accord avec votre analyse ... Le problème état que j'ai eu tout juste une semaine pour "apprendre" le python ("dans un but de scripting, ce sera pas compliqué tu verras" m'a-t-on dit ...) et je me retrouve aujourd'hui à devoir faire les scripts sans "vrai" apprentissage ...

    Je ne suis pas du tout contre le fait d'apprendre mais on ne m'en a pas laissé le temps en fait ... donc je me retrouve dans la situation actuelle ...

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par molochlebanni Voir le message
    Le problème état que j'ai eu tout juste une semaine pour "apprendre" le python ("dans un but de scripting, ce sera pas compliqué tu verras" m'a-t-on dit ...)
    Ceux qui vous ont raconté çà devraient pouvoir vous aider et constater par eux même que c'est un peu plus compliqué.
    En tous cas, votre soucis est dans les échanges avec le serveur alors sans "print", difficile d'avancer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Petit souci dans un petit script Shell
    Par Khlomn dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 30/11/2011, 22h07
  2. Petit soucis de script VBS
    Par TheSpeedWave dans le forum VBScript
    Réponses: 6
    Dernier message: 25/10/2009, 12h26
  3. un petit souci dans mon script !
    Par kerberos dans le forum VBScript
    Réponses: 1
    Dernier message: 25/06/2008, 15h42
  4. Petit soucie avec script de récup d'info
    Par kimous dans le forum Web
    Réponses: 4
    Dernier message: 11/03/2008, 14h11
  5. Petit souci avec un script
    Par Equinoxe5 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/09/2006, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo