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 :

Programmation Système Pipe : Faire un mini shell en Python


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut Programmation Système Pipe : Faire un mini shell en Python
    Bonjour,

    Je suis actuellement étudiant en informatique et pour la réalisation d'un mini shell je coince un peu. Je souhaite gérer la communication entre plusieurs processus avec des pipes. J'y arrive pour 1 par exemple ls | more mais plusieurs je coince. Je ne suis pas à la recherche d'une réponse toute faite mais de l'idée expliquer en détail.

    Deux processus et un pipe :

    Code python : 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
     
    ligne1 = ["ls"]
    ligne2 = ["more"]
     
    (r,w)=os.pipe()
     
    fpid = os.fork()
     
    if fpid: #parent 
        print("1")
        os.close(r)
        os.dup2(w,1)
        os.execvp(ligne1[0],ligne1)
     
    else :#fils
        print("2")
        os.close(w)
        os.dup2(r,0)
        os.execvp(ligne2[0],ligne2)


    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     #creation tableau de pipe   
    tab=[]
    for i in range(2):
        (r,w)=os.pipe()
        tab.append((r,w))

    L'idée que j'ai tenté de réaliser c'était de créer un tableau de pipe [(3,4),(5,6)...] dépendant du nombre de pipe (mais bon je pense pas que cela fonctionne ainsi) et d'associer le stdout du premier processus à 3 descripteur du pipe en lecture et le stdin du second processus au descripteur en écriture du pipe 4 ainsi de suite.

    Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 687
    Par défaut
    Salut,

    Python offre de meilleures abstractions pour faire çà via le module subprocess.
    En gros, on écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    p1 = subprocess.Popen('ls ...', stdout=subprocess.PIPE)
    p2 = subprocess.Popen('more', stdin=p1.stdout, stdout=subprocess.PIPE)
    print p2.communicate()
    Et voilà.

    Pour faire cela avec les primitives de la libc, vous avez plein de tuto pour programmeurs C racontent comment faire.
    Python vous donne accès à ces primitives mais les utiliser sera, dans ce cas, aussi laborieux que si vous codiez en C.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Par défaut
    Bonjour,

    Grâce à ton exemple j'y vois un peu plus claire malheureusement je ne peux pas utiliser subprocess.popen. Merci de ta réponse je vais chercher un peu plus des exemples en C toute fois si quelqu'un a un autre exemple je suis preneur

Discussions similaires

  1. Mini-shell probleme avec pipe
    Par Appsolu dans le forum C
    Réponses: 11
    Dernier message: 13/08/2011, 00h07
  2. Programmation système : commande shell
    Par aradouani dans le forum Linux
    Réponses: 8
    Dernier message: 24/05/2011, 10h13
  3. Problème avec un mini-Shell en Python
    Par Revolver dans le forum Général Python
    Réponses: 0
    Dernier message: 16/03/2011, 10h30
  4. programmer un mini shell!
    Par nixmind dans le forum C
    Réponses: 36
    Dernier message: 21/11/2010, 18h05

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