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 :

recuperer le nom des imprimantes


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut recuperer le nom des imprimantes
    Bonjour,

    Je suis sur Kubuntu 14.04 X64 avec python 2.7.6 car j'utilise des anciennes machines.

    J'ai besoin de récupérer le retour de résultat du shell Linux afin d'obtenir le nom des imprimantes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cmd = "lpstat -p -d"
    sortie=os.popen(cmd).read() 
    print sortie
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    printer BRFAX is idle.  enabled since sam. 20 avril 2019 15:25:43 CEST
    printer MFC6490CW is idle.  enabled since mar. 11 juin 2019 11:49:02 CEST
    printer PDF is idle.  enabled since mer. 29 mai 2019 20:29:09 CEST
    system default destination: MFC6490CW
    afin d'obtenir le résultat suivant dans une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BRFAX
    MFC6490CW
    PDF
    je galére, j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    resultat_chaine = sortie[8:18]
    print(resultat_chaine)
    Comment puis-je faire ceci ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Je suppose que l'imprimante default est toujours en dernière position et toujours présente.

    Sans doute mieux à faire, mais en phase de digestion j'ai pas trop la tête qui tourne donc voici une proposition très basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lignes = sortie.split("\n")
    imprimantes = []
    for index, ligne in lignes :
      if index < (lignes.lenght-1) : # on ne veut pas prendre la dernière ligne
        mots = ligne.split(" ")
        if len(mots) > 1 :
          imprimantes.append(mots[1])
    print(imprimantes)
    Sans doute que d'autres s'amuseront avec la puissance du python pour améliorer cela.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 428
    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 428
    Points : 37 010
    Points
    37 010
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Sans doute que d'autres s'amuseront avec la puissance du python pour améliorer cela.
    Un truc comme çà peut être?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> [ z.split(' ')[1] for z in sortie.splitlines()[:-1]]
    ['BRFAX', 'MFC6490CW', 'PDF']
    On peut même sortir les expressions régulières!
    Mais sans code initial, on peut toujours se faire plaisir à poster du joli code mais le PO risque de ne pas trop savoir qu'en faire.... pour autant qu'on ait envie de faire son boulot (les chaines de caractères et les boucles sont quand même des bases qu'on est supposé connaitre...)

    - W

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Ouais je pensais à un truc du genre, c'est le grand dada de beaucoup de Pythoniste.
    Mais pour ma part je trouve cela puissant, mais difficile à lire, et souvent en manque de contrôle.
    Dans le cas de ce code on a un souci par exemple si split ne retourne pas un tableau de 2 minimum.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 428
    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 428
    Points : 37 010
    Points
    37 010
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Dans le cas de ce code on a un souci par exemple si split ne retourne pas un tableau de 2 minimum.
    Ah bon? Quel soucis?

    - W

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Si z est une chaîne de caractère sans espace alors split renverra un tableau de un seul élément, placé à l'index 0.
    L'accès à l'index 1 renverra donc une exception IndexError.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 428
    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 428
    Points : 37 010
    Points
    37 010
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Si z est une chaîne de caractère sans espace alors split renverra un tableau de un seul élément, placé à l'index 0.
    Tout à fait. Mais est-ce que les configurations de printers pour lesquelles la sortie de "lpstat -p -d" pourrait ressembler à çà sont réalistes? Et s'il en existe peut-on se contenter de faire un try...except de l'IndexError ou faut-il être un peu moins laxiste sur les tests et vérifier au moins que la ligne commence bien par "printer ".

    - W

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 938
    Points : 7 347
    Points
    7 347
    Par défaut
    J'ai besoin de récupérer le retour de résultat du shell Linux afin d'obtenir le nom des imprimantes.
    Quitte à faire du bash, autant y rester et faire le travail correctement,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpstat -a | awk '{print $1}'
    ainsi on évite un traitement supplémentaire en python.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par fred1599 Voir le message
    Quitte à faire du bash, autant y rester et faire le travail correctement
    J'apprécie l'esprit. Autant donc éviter d'appeler un outil aussi massif que awk pour juste récupérer le premier mot de chaque ligne => lpstat -a | cut -f1 -d' '

  10. #10
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Tout à fait. Mais est-ce que les configurations de printers pour lesquelles la sortie de "lpstat -p -d" pourrait ressembler à çà sont réalistes? Et s'il en existe peut-on se contenter de faire un try...except de l'IndexError ou faut-il être un peu moins laxiste sur les tests et vérifier au moins que la ligne commence bien par "printer ".

    - W
    C'est un peu juste la philosophie de notre DSI...
    Ils prennent l'entrée telle qu'elle est à un instant t sans aucun test de limite ou autre.
    Et à chaque mise à jour d'équipement/logiciel ils doivent remettre à jour leurs scripts pour que ça refonctionne... (avec une panne du service pendant une semaine bien sûr)

    La bonne philosophie pour un informaticien c'est de se dire qu'on ne peut être à l'abri d'un changement de l'entrée de notre script.
    Ou encore comme on dit dans le domaine du web : ne jamais faire confiance à ce que va rentrer un utilisateur dans un formulaire ou une adresse.
    Je dis pas qu'il faut faire du zèle et un programme qui tournera pour la prochaine fusée, mais un minimum ça fait pas de mal.

    L'informaticien est la première cible en cas de bug.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 428
    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 428
    Points : 37 010
    Points
    37 010
    Par défaut
    Salut,

    Citation Envoyé par transgohan Voir le message
    Et à chaque mise à jour d'équipement/logiciel ils doivent remettre à jour leurs scripts pour que ça refonctionne... (avec une panne du service pendant une semaine bien sûr)
    De toutes façons, dès qu'il y a des dépendances entre différents composants, tout changement pourra causer des problèmes. Et si on veut les éviter, on organise les changements, on investit sur des plateformes de tests histoire de s'assurer que...
    et on ne confie pas à des débutants l'écriture de scripts qui iront en production.

    Le boulot du DSI la gestion économique des risques: faut-il construire et maintenir une plateforme de tests, fabriquer des suites de tests qui aient une bonne couverture fonctionnelle et en dérouler un sous ensemble suivant le type de changement envisagé?
    C'est un investissement, des coûts récurrents et une organisation à faire vivre... il est peut être plus économique (dans son activité/contexte) de pallier les problèmes lorsqu'ils surviennent... Pire, c'est une "stratégie" qu'une DSI ne peut adopter sans l'aval de la direction générale et des directions métiers (sinon le directeur se fera virer dès que les incidents se répètent un peu...).

    En tout cas, rien que Python ou les qualités d'un programmeur puissent résoudre (il peut juste changer de boite).

    - W

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    J'apprécie l'esprit. Autant donc éviter d'appeler un outil aussi massif que awk pour juste récupérer le premier mot de chaque ligne => lpstat -a | cut -f1 -d' '
    Bof, chez moi, lpstat -e donne directement la liste des imprimantes en une colonne sans info superflue... mais ce n'est pas drôle !

    Amusons-nous un peu :
    D'abord en bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export LSTIMP=`lpstat -e`
    Puis après avoir lancé python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import os
    os.environ['LSTIMP']

    Si je trouve autre chose de plus tortueux, je vous le dis...

Discussions similaires

  1. recuperer les noms des tables
    Par samyco dans le forum JDBC
    Réponses: 6
    Dernier message: 31/07/2007, 11h12
  2. récupération du nom des tables
    Par romram dans le forum Access
    Réponses: 2
    Dernier message: 06/12/2006, 15h16
  3. Recuperer le nom des menus
    Par thibal_kamehouse dans le forum Windows
    Réponses: 4
    Dernier message: 02/05/2006, 18h59
  4. Recuperer le nom des menus
    Par thibal_kamehouse dans le forum C++
    Réponses: 4
    Dernier message: 02/05/2006, 18h59
  5. comment recuperer le nom des champs ?????
    Par e11137 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/01/2004, 11h00

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