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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    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 émérite
    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
    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 averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    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 émérite
    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
    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 averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  6. #6
    Membre émérite
    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
    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.

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