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 :

subprocess - enchainement de commande


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 18
    Par défaut subprocess - enchainement de commande
    Bonjour,
    Je souhaite enchainer une commande linux simple genre:

    cd dossier
    ls

    j'ai ecrit une ebauche de script mais elle ne marche pas :

    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
    import subprocess
     
    cat = subprocess.Popen(['cd', 'dossier'], 
                            stdout=subprocess.PIPE,
                            )
    grep = subprocess.Popen(['ls'],
                            stdin=cat.stdout,
                            stdout=subprocess.PIPE,
                            )
     
    end_of_pipe = grep.stdout
     
    print 'Included files:'
    for line in end_of_pipe:
        print '\t', line.strip()
    voici le message d'erreur :
    Traceback (most recent call last):
    File "sub.py", line 4, in <module>
    stdout=subprocess.PIPE,
    File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite)
    File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child
    raise child_exception
    OSError: [Errno 2] No such file or directory
    En revanche si je fais
    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
    import subprocess
     
    cat = subprocess.Popen(['mkdir', 'test'], 
                            stdout=subprocess.PIPE,
                            )
     
    grep = subprocess.Popen(['ls'],
                            stdin=cat.stdout,
                            stdout=subprocess.PIPE,
                            )
     
    end_of_pipe = grep.stdout
     
    print 'Included files:'
    for line in end_of_pipe:
        print '\t', line.strip()
    Le dossier "test" est crée, donc je pense qu'il ya un problème avec 'cd' ...
    Je galère depuis quelques heures, si quelqu'un peut m'aider, ça serait sympa. merci

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Le but est réellement d'apprendre à utiliser subprocess ou tout simplement pouvoir lire le nom des fichiers d'un répertoire et créer un répertoire?

    Car pour faire ceci il y a mieux que subprocess

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 18
    Par défaut
    En faite je cherche à lancer un programme que j'ai ecrit en C donc la ligne de commande sera ./sudoku -a (par exemple) et pour cela je cherche à naviguer dans les dossiers.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Tu peux utiliser la fonction call de subprocess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from subprocess import call
    call(["./sudoku", "-a"])
    Pour naviguer dans les dossiers, tu peux regarder du côté du module os et la fonction listdir()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import os
    chemin = os.listdir(os.getcwd()) # donne le répertoire courant
    Pour changer de répertoire, toujours le module os

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.chdir("/...") # te place dans le répertoire /....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 18
    Par défaut
    Merci pour la réponse, mais je besoin de naviguer dans les dossiers avant.Par exemple :

    cd sudoko/
    ./sudoku

    Et je ne peux pas enchainer les commandes puisqu'il ne garde que la dernière commande, ce qui fait que je ne suis pas dans le bon répertoire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 18
    Par défaut
    Ok
    J'essaierai ça , mais du coup je pensais que le module subprocess remplaçait le module os

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Non non il est surtout utilisé dans la gestion de processus, il est surtout conseillé à la place de os.system qui est une utilisation un peu crade.

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

Discussions similaires

  1. [Batch] problème sur l'enchainement des commandes
    Par tibofo dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/10/2012, 14h10
  2. Réponses: 9
    Dernier message: 22/11/2011, 11h26
  3. commands, subprocess, output
    Par LupusCramus dans le forum Général Python
    Réponses: 6
    Dernier message: 30/07/2010, 20h48
  4. Enchainement de deux commandes Popen
    Par bijean dans le forum Général Python
    Réponses: 2
    Dernier message: 05/07/2009, 18h11
  5. Enchainement de commandes
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 12/05/2005, 17h00

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