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 :

Trouver l'emplacement d'un logiciel sur l'ordinateur [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut Trouver l'emplacement d'un logiciel sur l'ordinateur
    Bonjour,

    Existe-t-il une fonction Python qui permette de donner l'emplacement/chemin où se trouve un logiciel ?
    (ex : pour savoir où est Excel, récupérer C:\Program Files\Microsoft Office\excel.exe)

    Merci!

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Une recherche récursive ?

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Salut

    C'est plutôt du ressort de l'OS de fournir ce genre d'outils. Même si un langage (python, ou autre) le permet en, justement, s'appuyant sur l'OS, ce sera toujours une "sur-couche" !

  4. #4
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas de solution toute prête, j'en ai peur...
    Il y a bien os.walk mais un parcours exhaustif, ça risque d'être long.

    Alors comme je viens juste de résoudre le problème pour moi, je te livre ma solution pour trouver java sur un PC :

    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
    import os
     
    def listdir ( path ):
        try    : return os.listdir( path )
        except : return []
     
    def find_file ( fileok,dirok=None,base='',deep=0 ):
        if not base :
            for d in 'cdefgab' :
                res = find_file( fileok,dirok,d+':/',1 )
                if res : return res
            return
        for f in listdir( base ) :
            if dirok and dirok( deep,base,f ):
                ff = os.path.join( base,f )
                if os.path.isdir( ff ):
                    res = find_file( fileok,dirok,ff,deep+1 )
                    if res : return res
                elif fileok( ff ) :
                    return ff
     
    def find_java ():
        dirok  = lambda deep,dir,filename : deep < 6 and filename.lower().startswith( ('','prog','java','jdk','bin','java')[deep] )
        fileok = lambda filename : filename.lower().endswith('java.exe')
        return find_file( fileok,dirok )
    Il recherche un fichier qui matche : ?:/prog*/java*/jdk*/bin*/java.exe.
    A toi d'écrire les fonctions dirok et fileok qui vont bien pour ta recherche.

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'avais proposé il y a peu de temps un petit code Python qui fait ça:

    http://www.developpez.net/forums/d15...b/#post8379811

    Basé sur os.walk et fnmatch, il est finalement assez rapide et fait très bien le boulot.

    Et rien n'empêche de l'améliorer. Par exemple, arrêter la recherche au 1er trouvé. Ou même chercher selon un motif de regex, Ou même, soyons fous, selon une recherche de mots similaires (avec ratio de similitude) quand on n'est pas sûr de l'orthographe exacte du nom de fichier...

    A mon avis, en terme de rapidité, ce n'est pas la vitesse de Python qui compte mais celle de l'OS (accès disque). Et la seule façon qu'à l'OS d'accélérer ses recherches, c'est d'indexer les fichiers en avance.

  6. #6
    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,

    Sur unix, la commande magique s'appelle "which".
    La commande windows "where" fait a peu près le boulot.
    Après, si on veut intégrer la chose à un programme Python, lancer la commande via subprocess.check_output devrait suffire.


    notez que rechercher les répertoires contenant des fichiers nommés "excel.exe" ou "python.exe" pourra sortir bien plus l'exécutable lancé lorsqu'on tape "excel.exe" ou "python.exe". Ce n'est donc pas très fiable et en plus ça risque de durer un temps certain.

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

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Pour accélérer la recherche d'exécutables, peut-être peut-on chercher en priorité dans les répertoires du PATH?

  8. #8
    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 tyrtamos Voir le message
    Pour accélérer la recherche d'exécutables, peut-être peut-on chercher en priorité dans les répertoires du PATH?
    Certes mais pourquoi s'em... à recoder en Python ce que l'OS fait déjà assez bien?

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

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Certes mais pourquoi s'em... à recoder en Python ce que l'OS fait déjà assez bien?
    Pour le plaisir?

    Effectivement, WHERE en console sous Windows fait ça très bien, y compris en utilisant les répertoires du PATH! Je ne l'utilise jamais, mais j'ai tort.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Par défaut
    Merci beaucoup à tous pour vos réponses !
    Je n'ai pas pu tester toutes les propositions par manque de temps.. J'ai vu qu'on peut également utiliser glob, qui a l'air d'être simple à utiliser et bien fonctionner.
    J'ai choisi d'utiliser la commande Windows WHERE pour sa rapidité et car il permet de voir quel chemin est enregistré dans Path pour le logiciel (il me semble)(car le logiciel qui m'intéresse possède des extensions dans d'autres logiciels et donc je me retrouvai avec plusieurs solutions parfois).

    Merci !

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

Discussions similaires

  1. installer un logiciel sur plusieurs ordinateurs d'un domaine
    Par pacifiquement dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 30/12/2014, 16h55
  2. Trouver l'emplacement d'un fichier sur le disque
    Par zarbouine dans le forum Delphi
    Réponses: 4
    Dernier message: 12/02/2007, 18h48
  3. Réponses: 5
    Dernier message: 21/12/2004, 15h17
  4. Réponses: 8
    Dernier message: 08/06/2004, 01h29
  5. Trouver l'emplacement de la machine virtuelle java
    Par aymron dans le forum Windows
    Réponses: 2
    Dernier message: 30/03/2004, 12h11

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