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 :

Connexion SSH Paramiko problème sur test stderr, stdout [Python 2.X]


Sujet :

Python

  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Connexion SSH Paramiko problème sur test stderr, stdout
    Bonjour,

    J'ai ce bout de code que je test pour gérer la connexion à un serveur en ssh :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        stdin, stdout, stderr = client.exec_command("ls -lrt")
     
        if stdout !=():
            print "------STDOUT-------"
            print stdout.read() 
            print "-------------------"
     
        if stderr !=():
            print "------STDERR-------"
            print stderr.read()
            print "-------------------"
    J'ai vue dans la doc que stdin, stdout, stderr sont des tuples. Afin de gérer ses variables et éventuellement des erreurs, je vérifie qu'elles soient différentes d'un tuple vide, sauf que lors de ce test, la condition est toujours vérifiée.

    Lorsque la commande que je test (ls -lrt) est correct comme le code ci dessus, j'obtiens la sortie STDOUT et le résultat de ma commande :
    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
     
    [+] submit command ....
    ------STDOUT-------
    drwxr-xr-x 4 nekcorp nekcorp 4096 Nov 20  2014 TEMP
    -rw------- 1 nekcorp nekcorp 1675 Dec  9  2014 rsakey
    -rw-r--r-- 1 nekcorp nekcorp  397 Dec  9  2014 rsakey.pub
    drwxrwxrwx 3 nekcorp nekcorp 4096 Jan 22  2015 User_Routine_Samcef
    drwxr-xr-x 3 nekcorp nekcorp 4096 Jan 22  2015 Examples
    -rw-r--r-- 1 nekcorp nekcorp  210 Jan 27  2015 samrc.ini
    -rw------- 1 nekcorp nekcorp    0 Mar  6  2015 STDIN.o139502
    -rw------- 1 nekcorp nekcorp   74 Mar  6  2015 STDIN.e139502
    drwxrwxrwx 3 nekcorp nekcorp 4096 Apr  3  2015 Samcef
    -rw-r--r-- 1 nekcorp nekcorp    0 Jan 29  2018 remote_testfile.txt
    drwxr-xr-x 4 nekcorp nekcorp 4096 Mar 13  2018 script
    drwxr-xr-x 2 nekcorp nekcorp 4096 Oct 15 17:19 toto
     
    -------------------
    ------STDERR-------
     
    -------------------
    Cependant je récupère également le STDERR même si le résultat est vide (ligne 17-20).

    Du coup je doute que stdin, stdout, et stderr soient des tuples, surtout que je dois utiliser la méthode read() afin de les lire.

    Pouvez vous me dire quel type de test je dois faire sur ces variables afin que ceux ci soit valides ? Parce que si stderr n'est pas un tuple il sera toujours différent du tuple vide

    Merci d'avance pour votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Je ne sais pas de quel type c'est, mais en faisant
    tu devrais avoir la réponse non ? Et si c'est un objet
    t'en diras plus sur ce que tu peux faire avec (tu auras la listes des méthodes et attributs)

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    En fait je suis bête, les variables stdin, stdout et stderr ne sont pas des tuples c'est la manière dont elles sont déclarées qui forme un tuple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stdin, stdout, stderr = client.exec_command("ls -lrt")
    Et si c'est un objet
    Effectivement c'estt un objet et voilà ce que je récupère en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ['FLAG_APPEND', 'FLAG_BINARY', 'FLAG_BUFFERED', 'FLAG_LINE_BUFFERED', 'FLAG_READ', 'FLAG_UNIVERSAL_NEWLINE', 'FLAG_WRITE', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', '_DEFAULT_BUFSIZE', '__class__', '__del__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_at_trailing_cr', '_bufsize', '_closed', '_flags', '_get_size', '_pos', '_rbuffer', '_read', '_realpos', '_record_newline', '_set_mode', '_size', '_wbuffer', '_write', '_write_all', 'channel', 'close', 'closed', 'flush', 'newlines', 'next', 'read', 'readline', 'readlines', 'seek', 'tell', 'write', 'writelines', 'xreadlines']
    On retrouve bien la méthode read(), mais pas que ....

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    Pour moi, il ne te faut recupérer le contenu de stout et stderr et de tester ensuite ce contenu avant de l'afficher (/!\ code non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    stdin, stdout, stderr = client.exec_command("ls -lrt")
     
    stdoutcontent = stdout.readlines()
    stderrcontent = stderr.readlines()
     
    if stdoutcontent:
      print "------STDOUT-------"
      for line in stdoutcontent:
        print("{}\n".format(line))
      print "-------------------"
     
    ....

  5. #5
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par Fifan31 Voir le message
    Bonjour,

    Pour moi, il ne te faut recupérer le contenu de stout et stderr et de tester ensuite ce contenu avant de l'afficher (/!\ code non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    stdin, stdout, stderr = client.exec_command("ls -lrt")
     
    stdoutcontent = stdout.readlines()
    stderrcontent = stderr.readlines()
     
    if stdoutcontent:
      print "------STDOUT-------"
      for line in stdoutcontent:
        print("{}\n".format(line))
      print "-------------------"
     
    ....
    Salut effectivement c'est ce que j'ai fais, en fait je m'étais complètement loupé sur le type de variables qu'étais stdout et stderr.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur test d'intégration et custom validator
    Par omekiane dans le forum Grails
    Réponses: 3
    Dernier message: 12/04/2012, 15h32
  2. Connexion SSH refusée systématiquement sur Debian
    Par gwinyam dans le forum VirtualBox
    Réponses: 3
    Dernier message: 22/08/2011, 11h03
  3. problème connexion sur test de bande passante
    Par céforminux dans le forum Réseau
    Réponses: 1
    Dernier message: 03/06/2010, 09h44
  4. Problème sur test connection
    Par codial dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 21/11/2006, 14h45
  5. problème sur test if
    Par flo456 dans le forum ASP
    Réponses: 4
    Dernier message: 19/04/2006, 12h50

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