+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre du Club
    Inscrit en
    janvier 2012
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 96
    Points : 43
    Points
    43

    Par défaut Accès à un répertoire, Permission denied

    Bonjour à tous,

    dans mon programme python j'appele une fonction qui récupère le path d'un logiciel (écrit en dur dans un fichier de conf) puis qui l'execute. Seulement lorsque Python tente d'accéder au répertoire j'obtiens :

    sh: 1: /home/michel/Desktop/softwares/my_soft/: Permission denied
    Est-ce parce que je pars depuis la racine ? J'ai modifié les droits sur tous les répertoires du path (chmod ugo+x) mais rien n'y fait.


    EDIT : voici mon code :

    ma fonction qui récupère le path situé dans un fichier de conf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def Configuration_MySoft (conf_file):
    	Pita_path=""
    	with open(conf_file, "r") as conf_file:
    		conf = conf_file.readlines()
     
    		for lines in conf:
    			if "MySoft_location" in lines:
    				MySoft_path=lines.strip("MySoft_location=")
     
    	return(MySoft_path)

    Et l'appel à cette fonction dans mon programme principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.system(""+paths_definition.Configuration_MySoft("paths.conf")+"  .....

    Merci à vous.

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 557
    Points : 10 105
    Points
    10 105

    Par défaut

    Salut,

    Ajoutez shell=True à l'appel os.system!
    Mais pourquoi appelez une fonction via un os.system?

    - W
    Architectures Post-Modernes

  3. #3
    Membre du Club
    Inscrit en
    janvier 2012
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 96
    Points : 43
    Points
    43

    Par défaut

    salut wiztricks merci pour ta réponse.

    En fait dans mon os.system j'appel un software auquel je passe différents paramètres dont des fichiers. Et j'utilise ma fonction pour que Python localise l'endroit où se situe le logiciel.



    Y a t'il une meilleure solution ?

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 557
    Points : 10 105
    Points
    10 105

    Par défaut

    Salut,
    Pardonnez moi mais je me suis laissé avoir par la façon que vous avez eu de présenter: vous n'y êtes pour rien.

    L'erreur dit juste que "s/process n'a pas les droits d'accéder au répertoire".

    J'ai supposé que vous aviez testé "avoir accès au répertoire" hors programme.
    Et que le s/process n'héritant pas du contexte du père avait peut être besoin du shell pour se construire... Mais démarré via os.system, le shell est toujours là: c'était une fausse "bonne idée" d'autant qu'il est loin d'être certain que vous aviez fait le minimum syndical pour dérouler cette hypothèse.

    - W
    Architectures Post-Modernes

  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 722
    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 722
    Points : 3 958
    Points
    3 958

    Par défaut

    Bonjour,

    sh: 1: /home/michel/Desktop/softwares/my_soft/: Permission denied
    os.system(""+paths_definition.Configuration_MySoft("paths.conf")+" .....
    Ben oui... Un répertoire n'est pas un exécutable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> os.system("/home/patrice/Bureau/")
    sh: /home/patrice/Bureau/: Permission denied
    32256
    @+

    Edit : Je n'ai sans doute pas besoin de le préciser mais un print de la commande (""+paths_definition.Configuration_MySoft("paths.conf")+" .....) envoyée à os.system devrais vous aider.
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Membre du Club
    Inscrit en
    janvier 2012
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 96
    Points : 43
    Points
    43

    Par défaut

    En effet est plus approprié lorsqu'il s'agit de changer de répertoire.

    Merci à vous.

  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 722
    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 722
    Points : 3 958
    Points
    3 958

    Par défaut

    Rien a voir avec l'erreur:
    Avec .readlines() vous récupérez les fin de lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> with open('argsk.py', "r") as conf_file:
    ...     conf = conf_file.readlines()
    ... 
    >>> conf
    ['#!/usr/bin/env python\n', 'for v in "abcd":\n', '    print(v)\n']
    Ce que vous envoyez à os.system qui lui accepte le saut de page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> os.system("/home/patrice/Bureau/tt/\n" + "ls")
    sh: /home/patrice/Bureau/tt/: Permission denied
    argsk.py
    0
    os.chdir n'est qu'un contournement de celle ci.

    Note: Pourquoi conf = conf_file.readlines() ? Un simple for line in conf_file est bien suffisant. Après a vous de voir pour ce qui est du saut de ligne.

    @+
    Merci d'utiliser le forum pour les questions techniques.

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