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 :

Quelques questions (organisation fs Windows, sudo, etc


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Quelques questions (organisation fs Windows, sudo, etc
    Bonjour.

    Organisation du File System de Windows
    Je voudrais créer des répertoires contenant mes fichiers de configuration et les plugins :
    /usr/lib/calculatrice/plugins : plugins partagés
    .calculatrice : config de l'utilisateur
    .calculatrice/plugins :
    plugins de l'utilisateur

    Pour les fichiers cachés, j'ajoute un . devant les noms pour Linux/UNIX (dont Mac), et en cours, et pour Win : os.popen('attrib +h ' + chemin)
    Mais à quoi correspond /usr/lib sous Windows ? (pour Mac, il me semble que c'est le même).

    Importer tous les fichiers d'un répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for mod in listdir('.calculatrice/plugins/'):   # Recherche des plugins de l'utilisateur
            path.append('.calculatrice/plugins/')
            from mod import *
    ImportError: No module named mod
    Comment faire ?

    Sudo et les différents Linux
    Je suis sous Ubuntu 10.04. Pour lancer une commande en root, j'utilise sudo. 2tant sous GNOME, je peux aussi utiliser gksu. D'autres Linux ont su, mais root n'ayant pas de mot de passe, su est inutilisable. Sous KDE, ils ont kdesu... N'y a t-il pas une commande commune à tous les GNU/Linux, qu'ils utilisent GNOME ou KDE ou autre ?


    Merci pour vos réponses.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    j'imagine que le path que tu modifies est sys.path. essaie en donnant un chemin absolu vers ton répertoire de plugins:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import os
    abspath = os.path.abspath('.calculatrice/plugins')
    Pour le répertoire d'installation des plugins sous Windows, je ne sais pas trop quel pourrait être l'équivalent du /usr/lib à part le "Program Files" ou alors le "Documents and Settings/All Users/Application Data"

    Pour les commandes "root" sur Linux, il suffit à l'utilisateur de ton script de lancer la commande en root de la manière qui va bien en fonction de la distrib. Pourquoi vouloir intégrer toi même les commandes genre "sudo" dans ton programme ?

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from os import path
    path.abspath('/usr/lib/calculatrice/plugins/')
        for mod in listdir('/usr/lib/calculatrice/plugins/'): # Recherche des plugins partagés
            from mod import *
        path.abspath('.calculatrice/plugins/')
        for mod in listdir('.calculatrice/plugins/'):   # Recherche des plugins de l'utilisateur
            from mod import *
    ImportError: No module named mod
    Même résultat.

    Pour root, on répète assez souvent "ne lancez jamais un programme en temps que root, sauf les outils de mise à jour, gestionnaires de paquets, etc... Puis pour l'utilisateur lambda, ça complique un peu les choses si il doit ouvrir son terminal, taper 'sudo python Téléchargements/Calculatrice.py'.

    Et un compte limité pourra-t-il utiliser une commande root ?

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Pour linux il faut que le script python soit lancé en mode console en super-utilisateur
    sudo python monprog.py
    et on donne le mot de passe (toujours en console).
    Après tout se passe normalement pour les questions de droits.
    C'est vrai qu'Ubuntu ne crée pas de root mais l'utilisateur qui a créé le système possède les droits du super-utilisateur.
    On peut également à tout moment créer 'root', rien ne s'y oppose.
    PS: Kango a déjà dit tout ça j'avais lu un peu vite. Doublon donc.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Au niveau des dossiers sous Windows, le mieux est de passer par les variables d'environnement à mon avis.
    Pour les paramètres (et plugins) partagés, je dirais de les mettre dans %ALLUSERSPROFILE%\nom_de_l'appli ou %PROGRAMDATA%\nom_de_l'appli mais cette dernière variable n'existe que sous Vista et Seven.
    Pour les paramètres de l'utilisateur, %APPDATA%\nom_de_l'appli

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    @Zavonen : On répète assez souvent de ne jamais lancer d'applications en temps que root, sauf un gestionnaire de paquets ou un soft de confiance, provenant par exemple de Canonical ou Red-Hat. De plus, tous les utilisateurs n'ont pas accès à sudo : un compte limité ne pourra, à ma connaissance, pas l'utiliser. Installer l'application en temps que root, ok, les linuxiens sont habitués à entrer leur passwrd à l'installation d'un soft (si je réussi, il est possible que je crée un installateur et qu'il n'y ai plus besoin de sudo dans le programme), mais l'entrer à chaque utilisation, et démarrer le programme par la console, non !
    @dividee : Merci pour ces infos. Je vais prendre les variables compatibles avec tous les Windows. Mais d'où viennent ces variables ? de sys ? de Python lui même ?

    Merci.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Citation Envoyé par Spitfire 95 Voir le message
    @dividee : Merci pour ces infos. Je vais prendre les variables compatibles avec tous les Windows. Mais d'où viennent ces variables ? de sys ? de Python lui même ?
    Elles sont initialisées par le système (Windows), ça n'a rien de spécifique à Python.
    En Python tu récupères leur valeur ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import os
    >>> os.environ['APPDATA']
    'C:\\Users\\toto\\AppData\\Roaming'

  8. #8
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    On répète assez souvent de ne jamais lancer d'applications en temps que root,
    for mod in listdir('/usr/lib/calculatrice/plugins/'):
    Toucher à /user/lib/ ce n'est pas à la portée de l'utilisateur lambda.
    Il faut savoir ce qu'on veut...

  9. #9
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour.
    Mon code :
    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
    if name=="posix":
            if not isdir('/home/.calculatrice/plugins/'):
                if not isdir('/home/.calculatrice/'):
                    mkdir('/home/.calculatrice/')
                mkdir('/home/.calculatrice/plugins/')
            if not isdir('.calculatrice/plugins/'):
                if not isdir('.calculatrice/'):
                    mkdir('.calculatrice/')
                mkdir('.calculatrice/plugins')
     
            path.append('/home/.calculatrice/plugins/')
            for mod in listdir('/home/.calculatrice/plugins/'): # Recherche des plugins partagés
                __import__(splitext(mod)[0])
     
            path.append('.calculatrice/plugins/')
            for mod in listdir('.calculatrice/plugins/'):   # Recherche des plugins de l'utilisateur
                __import__(splitext(mod)[0])
    Ça fonctionne, et j'ai remplacé le répertoire /usr/lib par /home dont les droits d'accès me permettent de créer mes fichiers et mes dossiers.

    Quelqu'un serait-il volontaire pour refaire ce code pour if name='mac' et if name='win32' ? Je ne connais pas ces systèmes, et je n'ai pas le matériel pour tester les résultats obtenus.
    Si vous avez besoin du code complet : http://free-apps.evoconcept.net/code...&lg=py&lines=0

    Merci.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2009, 16h47
  2. Réponses: 5
    Dernier message: 22/08/2008, 10h59
  3. Application Swing.. quelques questions d'organisation
    Par Invité dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 07/06/2006, 15h25
  4. quelques petites questions sur les windows form
    Par natasha84 dans le forum C++/CLI
    Réponses: 22
    Dernier message: 25/05/2006, 22h14
  5. [install]Install sous windows... quelques questions
    Par omega dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/02/2004, 09h50

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