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

    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 :
    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 :
    os.system(""+paths_definition.Configuration_MySoft("paths.conf")+"  .....

    Merci à vous.

  2. #2
    Modérateur

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

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    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
    Nouveau Membre du Club
    Inscrit en
    janvier 2012
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 95
    Points : 39
    Points
    39

    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
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 599
    Points
    3 599

    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 :
    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
    Nouveau Membre du Club
    Inscrit en
    janvier 2012
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 95
    Points : 39
    Points
    39

    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 599
    Points
    3 599

    Par défaut

    Rien a voir avec l'erreur:
    Avec .readlines() vous récupérez les fin de lignes
    Code :
    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •