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 :

Obtenir le répertoire "home" de l'utilisateur


Sujet :

Python

  1. #1
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut Obtenir le répertoire "home" de l'utilisateur
    Salut à toutes et à tous

    Ca fait bien longtemps que je cherche un moyen de connaître l'adresse du dossier personnel de l'utilisateur (/home/<user> sous linux, C:\Users\<user> sous dodos). Oui, j'aurais pu l'adresser comme je l'ai fait entre les parenthèses, mais ce n'est pas très propre.

    Voila que je mets la main sur un module que je ne connaissais pas: user.
    Super !
    Ah, mais il est déprécié dans 2.6, et retiré dans 3.0...
    Alors... des alternatives ?

    Et tant que j'y suis, savez-vous comment faire des dossiers cachés proprement avec python ? (indépendamment de l'os bien sur...)

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 481
    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 481
    Points : 9 280
    Points
    9 280
    Billets dans le blog
    6
    Par défaut
    Bonjour.

    Pour obtenir le répertoire utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import os
    print os.path.expanduser('~')
    Et c'est multiplateforme.
    - linux: "/home/nomutilisateur"
    - windows: "C:\Users\nomutilisateur"

    Pour les répertoires cachés:
    - linux: il suffit de créer un répertoire qui commence par un point
    - windows: je ne sais pas

    Tyrtamos

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Et c'est multiplateforme.
    Mmmh, j'avais un doute pour windows, mais comme un idiot je n'ai pas testé avant de poser la question... On mettra ça sur le compte de la fatigue

    Merci pour la réponse

    Me reste à trouver un bon moyen pour les dossiers cachés... Peut-être une classe perso, mais c'est dommage...

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    De mon coté j'utilise os.environ['HOME'] mais je ne sais pas ce que cela donne sous Windows.

    Pour ce qui est des dossiers sous Windows pour les cacher pour l'exploration a partir du réseau tu mets un $ en premier et pour l'explorateur local tu mets l'attribut caché.

    A vrais dire le mieux est de tester la plateforme (platform.system()) et de mettre soit un point soit l'attribut.

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Pour ce qui est de Windows tu as os.system('attrib +h ' + os.path.joint(os.environ['HOME'], 'lenomdetonrep')) mais tu dois bien avoir une fonction du style 'setattr(objet, attribut, valeur)'.

  6. #6
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Oui, je connais bien la commande attrib de windows, mais je cherche surtout un moyen de le faire qui soit indépendant de l'os.

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Je n'ai pas de poste Windows mais peut être avec un os.stat sur un dossier puis un autre après un attrib +h pour voir la différence ?
    Après tu applique cela avec un os.chmod ?
    C'est juste une idée.

  8. #8
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Merci pour cette aide Mais je vois de manière très claire comment faire ce attrib. La question que je me pose c'est "existe-il une fonction built-in pour gérer les dossiers cachés". Mais je pense bien que la réponse est non, c'est pourquoi je ferai une classe pour cela.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Il n'y a pas de fonction/module ... multiplateforme pour créer un dossier caché car la manière de faire est totalement différente (une basée sur le nom et une sur un attribut) .

  10. #10
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Citation Envoyé par Antoine_935 Voir le message
    Merci pour cette aide Mais je vois de manière très claire comment faire ce attrib. La question que je me pose c'est "existe-il une fonction built-in pour gérer les dossiers cachés". Mais je pense bien que la réponse est non, c'est pourquoi je ferai une classe pour cela.
    Si tu arrives à quelque chose de concluant je serais très intéressé.

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    C'est presque un euphémisme rambc, si Antoine_935 arrive à nous faire une class je prend aussi.
    A vrais dire cela m'arrangerais pour porter vers Windows un projet perso de gestionnaire de fichier full python

  12. #12
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Haha, puisqu'il s'agit d'utilité publique, je vais essayer de faire ça, avec une interface convenable
    Mais en soi, ça ne devrait pas être nécessaire pour un gestionnaire de fichier, puisqu'il reste possible de lister et lire les dossiers comme d'habitude.

  13. #13
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Je me permets de poster un nouveau message pour que les intéressés voient l'update depuis la liste des topics

    Voici le résultat J'ai essayé de rester cohérent avec la convention de nommage du module os.
    Il devrait fonctionner sous linux/*nix aussi, mais n'en ayant pas sous la main, je n'ai pas pu tester.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Points : 79
    Points
    79
    Par défaut
    Bravo Antoine, ça a l'air très sympa :p

    Par contre j'ai un peu de mal à comprendre le code^^ Dans la fonction sethidden(path,toggle), qu'est-ce que toggle?

    Dans l'hypothèse ou je voudrais tester ta fonction sous windows, je devrais créer un code qui ressemble à ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from hidden_tools import *
     
    sethidden(C:\\Python26\\test.py,true)
    Pour les doubles antislash, j'ai remarqué que dans mes fonctions, à chaque fois que j'indique un chemin en paramètre le shell IDLE ne le trouve qu'avec cette syntaxe, je ne sais pas trop pourquoi. Sous linux je n'ai aucun problème.

  15. #15
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    C'est parce que '\' est un caractère d'échapement (par ex '\n' est un retour à la ligne)

    Pour te simplifier la vie, marque tes chemin non pas avec des anti-slash, mais avec des slashs tout simplement, python sait très bien quand les remplacer par des anti-slashs.

  16. #16
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par scheme Voir le message
    Dans la fonction sethidden(path,toggle), qu'est-ce que toggle?
    toggle marque si oui ou non tu veux que le fichier soit caché. Met le à True pour cacher, False pour rendre visible.


    Sous windows, le code serait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sethidden(r"C:\Users\Antoine\AppData", False)
    Ou alors, comme l'a dit N.Tox, avec des slashes.

  17. #17
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Citation Envoyé par scheme Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from hidden_tools import *
     
    sethidden(C:\\Python26\\test.py,true)
    Pour les doubles antislash, j'ai remarqué que dans mes fonctions, à chaque fois que j'indique un chemin en paramètre le shell IDLE ne le trouve qu'avec cette syntaxe, je ne sais pas trop pourquoi. Sous linux je n'ai aucun problème.
    Essayes le code suivant, tu verras pourquoi il faut doubler les anti-slashs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/env python
    #coding=utf-8
    print "C:\\Python26\\test.py,true"
    print "C:\Python26\test.py,true"
    \t est un tabluation alors que \\t sera vu comme \t.

  18. #18
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Antoine_935, bravo et merci pour ce code que je lirais quand le temps libre frappera à ma porte.

    C.

  19. #19
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par Antoine_935 Voir le message
    Il devrait fonctionner sous linux/*nix aussi, mais n'en ayant pas sous la main, je n'ai pas pu tester.
    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
    patrice@Zeus:~/Bureau$ python
    Python 2.5.2 (r252:60911, Jul 22 2009, 15:35:03) 
    [GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from hidden_tools import *
    >>> files ="/home/patrice/Bureau/grep.py"
    >>> sethidden (files, true)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'true' is not defined
    >>> sethidden (files, True)
    '/home/patrice/Bureau/.grep.py'
    >>> quit()
    patrice@Zeus:~/Bureau$ ls .grep.py
    .grep.py
    Pas de pb sous tux non plus Antoine_935.
    Grand merci.

  20. #20
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Merci pour ce test
    Heureux d'avoir pu vous aider !

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

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