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

Python Discussion :

Récupération conf switchs


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut Récupération conf switchs
    Bonjour,

    J'essaie actuellement d'écrire un script qui me permet de récupérer la configuration de mes switchs HP.
    Je me suis renseigné sur le module "paramiko", la connexion en SSH fonctionne bien mais j'ai un petit soucis au moment de la réception des données.

    Voici la partie du script qui pose soucis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    chan = client.invoke_shell()
    time.sleep(2)
    chan.send('display current configuration\n')
    time.sleep(10)
    output = chan.recv(999999)
    print (output)
    Le script affiche bien ce qui est en sortie dans le prompt après la commande "display current configuration", mais il s'arrête au premier "---- More ----"

    du coup mon fichier en sorti, ressemble juste à ça...autant dire qu'il n'y a pas grand chose^^

    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
    <switch>display current configuration
    #
     sysname switch
    #
     clock timezone Amsterdam add 01:00:00
     clock summer-time FDT 14:14:23 March last Sunday 14:14:23 October last Sunday 01:00:00
     clock protocol ntp
    #
     irf domain 10
     irf mac-address persistent timer
     irf auto-update enable
     undo irf link-delay
     irf member 1 priority 30
     irf member 2 priority 28
     irf member 3 priority 26
    #
    si vous avez une idée je suis preneur

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    .invoke_shell simule (par défaut) un terminal interactif 24x80. Ce qui permet à la commande exécutée de "paginer" la sortie. Il serait préférable d'utiliser .exec_command avec l'option get_pty=False.

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

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    .invoke_shell simule (par défaut) un terminal interactif 24x80. Ce qui permet à la commande exécutée de "paginer" la sortie. Il serait préférable d'utiliser .exec_command avec l'option get_pty=False.

    - W
    Merci, effectivement cela semble mieux fonctionner !

    j'ai modifié le code comme ceci

    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
    ###session start
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(ip, username=USER, password=PASSWORD, look_for_keys=False, allow_agent=False)
     
    print('started...')
    stdin, stdout, stderr = client.exec_command('display current configuration', get_pty=False)
     
    filename = "%s_%.2i%.2i%i_%.2i%.2i%.2i" % (filename_prefix,now.year,now.month,now.day,now.hour,now.minute,now.second)
    ff = open(filename, 'a')
     
    for line in iter(stdout.readline, ""):
        output= (print(line, end=""))
        ff.write(output)
    print('finished.')
    ff.close()
    lient.close()
    Cela dit mon write me met comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: write() argument must be str, not None
    Visiblement c'est pas du str qui ressort de la commande, j'ai essayé de la convertir en str et de l'encoder en UTF-8 mais ça ne fonctionne pas non plus.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for line in iter(stdout.readline, ""):
        output= (print(line, end=""))
        ff.write(output)
    vous assignez à chaque itération le retour de "print" (qui est None) à output.

    Pour le reste, vous récupérez probablement des "bytes" (et non un str).
    Quel encoding? Probablement de l'US ASCII car c'est bien plus maintenable.

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

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut
    Pour l'encoding j'ai pris l'UTF-8, j'ai regardé un peu et c'est ce qui est utilisé en général pour les matériels réseaux

    en fait ce que je comprends pas c'est que si je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for line in iter(stdout.readline, ""):
        print(line, end="")
    Je vois bien mon fichier de configuration apparaitre dans mon terminal quand j'éécute mon script.
    Donc il est pas NONE visiblement.

    Donc je m'étais dis qu'il fallait juste récupérer le print et faire un write mais apparemment non et je comprends pas pourquoi.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Citation Envoyé par Larkhyl Voir le message
    Donc je m'étais dis qu'il fallait juste récupérer le print et faire un write mais apparemment non et je comprends pas pourquoi.
    Houlà... Vous avez appris à programmer avec quel genre de tuto?
    Si dans votre boucle vous afficher "line", pourquoi ne pas l'écrire aussi dans le fichier?

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

Discussions similaires

  1. Problème conf switch HP Procurve 2910
    Par Jb_One36 dans le forum Développement
    Réponses: 1
    Dernier message: 31/01/2012, 12h01
  2. récupération adresse mac des switch
    Par allyson_programmeuse dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2011, 15h22
  3. Récupération de log switch cisco et asa
    Par rezguiinfo dans le forum Développement
    Réponses: 3
    Dernier message: 10/01/2011, 17h46
  4. Telnet conf switch
    Par calimero642 dans le forum Modules
    Réponses: 4
    Dernier message: 10/07/2006, 10h52
  5. Récupération de log switch cisco
    Par fara morgana dans le forum Développement
    Réponses: 6
    Dernier message: 07/06/2006, 15h07

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