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 :

problème dans l'appel d'une commande Linux dans python


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut problème dans l'appel d'une commande Linux dans python
    Bonjour,

    J'appel une commande "ls" a travers "os.system()" qui me liste les sous repertoires situant dans un chemin donné par l'utilisateur.
    Je sauvegarde le résultat de "ls" dans un fichier texte.
    chaque fois que j'execute mon programme mon fichier texte est toujours vide
    Aidez moi svp !!!

  2. #2
    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
    Donne des détails sur la manière dont tu procèdes

    Voila ce que j'ai de mon côté, et tout fonctionne convenablement:
    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
    ~/projects $ ls
    Aspyct   CythonPlay  Math
    Aspyct-3.0_beta_5.tar.gz  ClipNet   WeST
     
    ~/projects $ python
    Python 2.5.4 (r254:67916, Feb 17 2009, 20:16:45) 
    [GCC 4.3.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os
    >>> os.system("ls > list")
    0
    >>> 
     
    ~/projects $ ls
    Aspyct   CythonPlay  list  WeST
    Aspyct-3.0_beta_5.tar.gz  ClipNet   Math
     
    ~/projects $ cat list
    Aspyct
    Aspyct-3.0_beta_5.tar.gz
    ClipNet
    CythonPlay
    list
    Math
    WeST
    Le fichier "list" a bien été créé.

    Et si tu préfères récupérer la sortie de ls dans python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import os
    >>> p = os.popen("ls")
    >>> p.read()
    'Aspyct\nAspyct-3.0_beta_5.tar.gz\nClipNet\nCythonPlay\nlist\nMath\nWeST\n'

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Merci.
    Mais ce que je fais moi c'est : appeler la commande a partir d'une fonction dans un fichier toto.py et qui contient le code pour lister les repertoires. exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def ma_fonction(req):
        import os
        input_file=str(req.form['decomp'])  # req.form['decomp'] c'est le contenu du champs d'id='decomp' et qui contient le chemin du repertoire que je veux lister le contenu.
        output_file="new_1.txt"  # c'est le ficher texte ou je veux mettre le résultat de "ls"
        os.system('ls input_file>output_file')
    ..................

  4. #4
    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 ghadroud Voir le message
    os.system('ls input_file>output_file')
    Contrairement au PERL et PHP, Python ne remplace pas les variables par leurs valeurs dans les strings.

    Par contre, ce code fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.system("ls %s > %s" % (input_file, output_file))
    Et si tu veux éviter que des éventuels messages d'erreurs apparaissent dans la console, tu peux aussi rediriger stderr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.system("ls %s > %s 2> /dev/null" % (input_file, output_file))
    Note: importer un module dans une fonction est déconseillé, car c'est une perte de temps facilement évitable. Surtout pour le module os qui est importé au chargement de Python.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    ca marche toujours pas
    remarque : si je fais pas import comment il va reconnaitre os.system()?

  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
    Citation Envoyé par ghadroud Voir le message
    remarque : si je fais pas import comment il va reconnaitre os.system()?
    Il suffit de l'importer en début de fichier.

    Si ça ne marche pas, c'est peut-être aussi parce que les variables ne contiennent pas des données valides, comme par exemple une dossier inexistant. Dans ce cas, ls créera un fichier vide.

    Si ce n'est pas ça, montre ton code, sans quoi je ne pourrais pas plus t'aider.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
    def FormInsertMedicalImageBatchAnalyze(req):
        Page='FormInsertMedicalImageBatchAnalyze'
        withvars = {}
     
        input_file=str(req.form['decomp'])
        req.write(req.form['decomp'])
        output_file="/tsi/jammu/zmerli/Desktop/new_1.txt"
        os.system("ls %s > %s" % (input_file, output_file))
     
        withvars['desc_file_data']=output_file.file.read().split('\n')
        return htmlutils.any_page_test(req,Page,sitelocation=htmlutils.siteloc_test(Link),withvars=withvars)

    explication:
    je liste les fichiers sous le repertoire saisi par l'utilisateur et je sauvegarde le résultat dans un fichiers textes. Après je lits dans a partir de ce fichier et je retourne le résultat dans une zone de texte.

  8. #8
    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
    Pour lister en python on fait avec :
    Donc après tu n'as plus besoin de passer par un fichier intermédiaire pour afficher le résultat dans une zone de texte .

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Je recois un autre message d'erreur au moment de l'execution, le fichier .txt n'est pas reconnu comme file.

    File "/ldaphome/zmerli/public_html/plato-web/controllers/medicalimage.py", line 898, in FormInsertMedicalImageBatchAnalyze
    withvars['desc_file_data']=output_file.file.read().split('\n')

    AttributeError: 'str' object has no attribute 'file'

  10. #10
    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
    output_file.file.read() => ca veut rien dire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open(output_file, 'r').read()
    Mais bon il vaut mieux utiliser os.listdir() .

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Voila j'ai essaiyé avec os.listdir(path) et j'ai eu ce message que je comprends pas du tout sachant que le path existe.


    OSError: [Errno 2] No such file or directory: '/Desktop/Abdomen/MRI/'

  12. #12
    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
    Le répertoire Desktop n'est pas dans le home directory d'un utilisateur plutôt ?

  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
    / référence la racine de ton système. Et il y a de fortes chances qu'il n'y ait pas de Desktop dedans. Essaye plutôt "/home/ton_login/Desktop" ou simplement "Dekstop" si le dossier actif et ton home. Si tu te sers de la commande ls, tu peux mettre "~/Desktop"

  14. #14
    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
    Pour retrouver ton home directory sous linux en python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    home = os.path.expanduser("~")

  15. #15
    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
    Intéressant ça.

    Tant qu'on en est à parler des dossiers utilisateurs, comment fait-on pour obtenir un dossier "application data" sous windows, dans lequel on peut sauver des préférences ?

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    j'ai changé plusieurs fois de chemin mais python ne reconnait aucun
    Par contre le chemin est bien accessible a travers le terminal.
    Je comprend pas !

  17. #17
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    j'ai changé plusieurs fois de chemin mais python ne reconnait aucun
    Qu'as-tu essayé comme chemin?

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Tous mes fichiers de test sont dans le bureau donc a partir du terminal j'accède au fichier qui est sur le bureau et je fais "pwd" qui me donne le chemin ou je suis je le copie dans ma fonction.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Salut,
    je suis pas un champion de python mais il m'est déjà arrivé de ne rien retrouvé dans un fichier dans lequel j'avais fait écrire quelque chose à python et la raison était que je ne refermai pas bien le fichier.
    A la fin de ton écriture dans le fichier, refermes-tu bien ton fichier (attention à ne pas oublier les parenthèses, car python ne renvoie pas d'erreur mais ne referme pas le fichier et quand tu l'ouvres, il apparait vide...)
    Je ne sais pas si ça peut aider et que ça ne répond pas à toute la question (et notamment au problème d'arborescence) mais voilà pour ma contribution...
    Bonne journée,

    Fred

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Merci Fred
    Mais le système n'arrive pas au niveau de lecture dans le fichier il ne le reconnait meme pas. c'est ca mon prbl.

Discussions similaires

  1. récupérer les résultats d'une commande linux dans une base de données
    Par fatimazahra kachiri dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/04/2014, 13h14
  2. Exécuter une commande linux dans X threads en parallèle
    Par sanchou dans le forum Général Java
    Réponses: 8
    Dernier message: 23/04/2008, 14h02
  3. lancer une commande linux dans un script perl
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 21/11/2007, 16h18
  4. Réponses: 3
    Dernier message: 06/11/2005, 18h02
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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