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 :

Doublons en sortie


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut Doublons en sortie
    Bonjour,

    Je suis sur une API Red Hat Satellite 5.5 (voir ici) que j'utilise pour implémenter plusieurs scripts python.

    Voici mon code source :

    test.py

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #!/usr/bin/python
    # -*-coding:Latin-1 -*
    # Import lib
    import xmlrpclib
    import sys
    import re
    import datetime
    import sys
    from time import mktime, strptime
     
    # Satellite connection
    S_URL = "http://monSite.com"
    S_LOGIN = "admin"
    S_PASSWORD = "admin"
    client = xmlrpclib.Server(S_URL, verbose=0)
    key = client.auth.login(S_LOGIN, S_PASSWORD)
     
    # Je liste mes stations 
    list_systems = client.system.listSystems(key)
    for system in list_systems:
    # Nom de la station
     SYSNAME = system["name"]
     list_id = client.system.getId(key,SYSNAME)
    # ID
     id = list_id[0]['id']
     # Je liste mes fichiers
     list_files = client.system.config.listFiles(key,id,1)
     for element in list_files:
     # Tous mes fichiers
      PATH = element["path"]
    # Seulement les fichiers sudoers et users.allow  
      if PATH == "/etc/sudoers" or PATH == "/etc/centrifydc/users.allow" :
       # Resultat en sortie "
       print "%s : %s : %s : %s" % (SYSNAME, id, PATH, PATH)
     
     
    client.auth.logout(key)
    Voici mon resultat :
    Nom : Screenshot.png
Affichages : 124
Taille : 3,5 Ko


    J'aimerais savoir comment fait on pour retirer les doublons puis obtenir un resultat de cette façon :

    NomStation : IdStation : /etc/sudoers/ : /etc/centrifydc/users.alow


    Quelqu'un aurait un idée svp?

    Cdt,

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

    C'est cohérent avec ce qui est écrit à la ligne 35:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      print "%s : %s : %s : %s" % (SYSNAME, id, PATH, PATH)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Oui c'est cohérent pourquoi?

  4. #4
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    Pourtant, tout est dans la réponse de - W.
    Tu demande imprimer deux fois la variable PATH.
    Remplace par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "%s : %s : %s" % (SYSNAME, id, PATH)
    ça devrait aller mieux.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Taylor08 Voir le message
    Oui c'est cohérent pourquoi?
    C'est votre code: impossible de répondre à votre place.
    Et le post d'e-ric, montre que c'est quand même trivial à corriger, non?

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

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Alors justement le fait de mettre deux fois la variable PATH me permettra de voir si la station contient le fichier "etc/sudoers" et le fichier "etc/centrifydc/user.allow/" aussi

    C'est à dire dans l'idée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     PATH = element["path"]
    # Seulement les fichiers sudoers et users.allow  
      if PATH == "/etc/sudoers" or PATH == "/etc/centrifydc/users.allow" :
       # Resultat en sortie "
       print "%s : %s : %s : %s" % (SYSNAME, id, PATH, PATH)
     
    #  print "%s : %s : %s : %s" % (SYSNAME, id, PATH, PATH)
    #  si la station a ces deux fichiers alors le résultat  
    #  en sortie serait  : NomStation (SYSNAME) : IdStation (id) : /etc/sudoers (PATH) : /etc/centrifydc/users.allow (PATH)


    Maintenant ayant suivi vos conseils je n'ai quand même pas eu la réponse que je voulais car j'ai toujours ce doublon qui me gène :

    Nom : Screenshot-1.png
Affichages : 114
Taille : 2,6 Ko

    Au final ce que je souhaiterais, c'est d'arriver à un resultat comme ceci : NomStation : IdStation : /etc/sudoers : /etc/centrifydc/users.allow

    Sur une seule même ligne avec aucun doublon.

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Y a du boulot... Commence par lire les docs et un peu les bases de la programmation.
    Une variable ne contient qu'une seule valeur qui peut être simple (nombre, chaîne) ou composée (liste), pour ton problème une liste devrait t'aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     PATH = element["path"]
    # Seulement les fichiers sudoers et users.allow  
      liste_de_paths = ["/etc/sudoers", "/etc/centrifydc/users.allow"]
      if PATH in liste_de_paths :
       # Resultat en sortie "
       print "%s : %s : %s" % (SYSNAME, id, " : ".join(liste_de_paths))
     
    #  print "%s : %s : %s : %s" % (SYSNAME, id, PATH, PATH)
    #  si la station a ces deux fichiers alors le résultat  
    #  en sortie serait  : NomStation (SYSNAME) : IdStation (id) : /etc/sudoers (PATH) : /etc/centrifydc/users.allow (PATH)
    Ce qui ne change pas le fait que ta variable PATH ne prendra qu'une valeur à la fois. Quel est l'intérêt d'afficher les deux valeurs alors qu'une seule a du sens ?

    Pour les doublons, il faut peut-être analyser ce que retournent les instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    list_systems = client.system.listSystems(key)
    for system in list_systems:
    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Oula Bon e-ric je pense qu'on ne s'est pas bien compris. Je n'avais pas envie d'expliquer tout mon code mais il va bien falloir tout expliquer!

    Voici mon code avec plus de commentaires détailées :
    P.S : Prenez le temps de bien lire mes commentaires car je ne code pas par pur bonheur !

    test.py

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #!/usr/bin/python
    # -*-coding:Latin-1 -*
    # Import lib
    import xmlrpclib
     
    # Satellite connection
    SATELLITE_URL = "http://martinique.hq.ep.corp.local/rpc/api"
    SATELLITE_LOGIN = "admin-integration"
    SATELLITE_PASSWORD = "admin-integration"
    client = xmlrpclib.Server(SATELLITE_URL, verbose=0)
    key = client.auth.login(SATELLITE_LOGIN, SATELLITE_PASSWORD)
     
     # Je liste mes stations
     # "print list_systems" me donne en sortie : "NomStation45, NomStation2, NomStation78, NomStation1....etc"
    list_systems = client.system.listSystems(key)
     # Pour chaque system de ma liste de systeme
     # je souhaite avoir le Nom de la station et son ID
    for system in list_systems:
     # Nom de la station
     SYSNAME = system["name"]
     list_id = client.system.getId(key,SYSNAME)
     # ID
     id = list_id[0]['id']
     # Ensuite je liste mes fichiers
     # "print list_files" me donne en sortie tous les paramètres qui correspond à :
     # string "type"
        # file
        # directory
        # symlink
     # string "path" - File Path
     # string "channel_label"
     list_files = client.system.config.listFiles(key,id,1)
     # Pour chaque element de ma liste de fichiers
     # je souhaite avoir que la liste des fichiers de toutes les stations
     # Et parmi cette liste que les fichiers "etc/sudoers" et "etc/centrifydc/user.allow"
     for element in list_files:
     # Tous mes fichiers
      PATH = element["path"]
     # Seulement les fichiers "etc/sudoers" et users.allow  
      if PATH == "/etc/sudoers" or PATH == "/etc/centrifydc/users.allow" :
     # Resultat en sortie "
       print "%s : %s : %s " % (SYSNAME, id, PATH)
     
    client.auth.logout(key)
    Au final ce code m'affiche
    Nom : Screenshot-1.png
Affichages : 116
Taille : 2,6 Ko

    Mais ce que je souhaite c'est qu'il me l'affiche sur cette forme là :

    1) Quand dans une station on a les deux fichiers
    Nom : Screenshot-2.png
Affichages : 118
Taille : 2,6 Ko

    2) Quand dans une station on a que le fichier "/etc/centrifydc/users.allow"
    Nom : Screenshot-3.png
Affichages : 115
Taille : 2,1 Ko

    3) Quand dans une station on a que le fichier "/etc/sudoers"
    Nom : Screenshot-4.png
Affichages : 110
Taille : 1,4 Ko

  9. #9
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Qu'est-ce qui t'empêche de les traiter à la suite l'un de l'autre ?

    Je veux dire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    fl = fl1 = ""
    for element in list_files:
        PATH = element["path"] 
        if PATH == "/etc/sudoers":
            fl = ": %s" % PATH
        elif PATH == "/etc/centrifydc/users.allow":
            fl1 = ": %s" % PATH
    print "%s : %s %s %s" % (SYSNAME, id, fl, fl1)

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    VinsS comment te dire....

    C'est parfait ! Merci à vous les gars !



    A bientot

  11. #11
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Désolé pour tout à l'heure, j'ai été un peu vif mais je ne comprenais pas ton intention.
    Bonne suite.

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

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

    ou encore comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        paths = [ zot for zot in  ("/etc/sudoers", "/etc/centrifydc/users.allow") if zot in list_files ]
        print "%s : %s %s" % (SYSNAME, id, ':'.join(paths))
    Il y a plein de façons d'écrire cela en Python.
    listes et chaînes de caractères sont des objets de base.
    Apprendre à les utiliser sont des constructions qu'on apprend dans des tutos.

    Si vous ne maîtrisez pas encore çà, travailler avec une API comme celle de "Red Hat Satellite 5.5" devient galère.
    Imaginer ce que vous pourriez en faire doit être une sorte de torture.

    Ce pourrait être une opportunité pour vous motiver à (re-)lire le Swinnen.
    Essayer de consolider/revoir les trucs qu'on a survolé lorsqu'on en a besoin est un bon truc pour progresser.

    Faire marcher ce code pour qu'il réponde à vos besoins est un sujet, vous donner les moyens d'y arriver par vous même en est un autre.

    A vous de voir.

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

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Wiztricks t'inquiète pas je suis qu'un débutant sur python, je ne cherchais pas non plus à faire un code en 3 lignes (un peu comme ton code). Mais plutot compréhensible à première vue comme celui de VinsS. Je fonctionne petit à petit en cherchant à comprendre ce que les autres font pour que je puisse le faire moi meme. L'optimiser n'est pas encore le but mais faire ce qui me parait le plus clair est mon BUT!

    Chaque chose en son temps selon moi.

    Cdt,

    P.S: Merci pour l'aide j'essayerais de le tester ton bout de code et l'adapter en fonction de mes besoins

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Taylor08 Voir le message
    Wiztricks t'inquiète pas je suis qu'un débutant sur python, je ne cherchais pas non plus à faire un code en 3 lignes (un peu comme ton code). Mais plutot compréhensible à première vue comme celui de VinsS. Je fonctionne petit à petit en cherchant à comprendre ce que les autres font pour que je puisse le faire moi meme. L'optimiser n'est pas encore le but mais faire ce qui me parait le plus clair est mon BUT!
    Inutile de dire que vous débutez: çà se voit.
    Mon propos était de vous inciter à jeter un oeil (et même les deux) dans un tuto.

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

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

Discussions similaires

  1. Doublons en sortie d'un tmap
    Par maubarr dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 02/05/2014, 11h47
  2. Rediriger le plux de sortie
    Par Groove dans le forum C
    Réponses: 5
    Dernier message: 17/04/2003, 17h16
  3. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29
  4. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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