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 :

projet python transfert de fichier avec un tube nommé


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut projet python transfert de fichier avec un tube nommé
    Bonjour,
    j'ai un problème avec mon projet en python, j'essai de transférer un fichier par un tube nommé entre deux client, pourtant, mon programme semble juste :
    client.py :
    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 client(readfd, writefd):
        nomfic = raw_input("entrez un nom de fichier : ")
           # envoyer le nom fichier dans le tube vers serveur
        os.write(writefd, nomfic)
            # lire le contenu du fichier dans le tube depuis serveur
        buff = os.read(readfd, 1000)
        while (len(buff) > 0):
                   # ecrire du contenu du fichier sur sortie standard
            os.write(1, buff)
            buff = os.read(readfd, 1000)
    exercice1.py :
    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
    import os,sys,time,client
     
     
    os.mkfifo("/tmp/moyendecom", 0600)
    os.mkfifo("/tmp/moyendecom2",0600)
    pid=os.fork()
    if pid==0 :
        fif1=os.open("/tmp/moyendecom",os.O_WRONLY)
        fif4=os.open("/tmp/moyendecom2",os.O_RDONLY)
            client.client(fif4,fif1)
        print "fils"
        sys.exit(0)
    else:
        fif2=os.open("/tmp/moyendecom",os.O_RDONLY)
        fif3=os.open("/tmp/moyendecom2",os.O_WRONLY)
        os.unlink("/tmp/moyendecom")
        os.unlink("/tmp/moyendecom2")
        sys.exit(0)
    Merci d'avance pour la réponse .

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut
    le problème est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "projetex1.py", line 10, in <module>
        client.client(fif4,fif1)
      File "/Users/adamharmands/Downloads/client.py", line 5, in client
        nomfic = input()
    EOFError
    encore merci d'avance pour la réponse

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 725
    Par défaut
    Vous avez un souci d'indentation ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        fif4=os.open("/tmp/moyendecom2",os.O_RDONLY)
            client.client(fif4,fif1)
        print "fils"
    Mais le souci ne viens pas de la: pourquoi os.fork() ?

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut
    os.fork() pour créer deux processus (qui s'execute en parrallèle), l'un est le client n°1(pid est le fils) et l'autre est le client n°2 (pid est le père). Mais peut on faire autrement?

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 725
    Par défaut
    Ce n'est pas vraiment du parallèle, le temps est partagé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os
     
    pid = os.fork()
     
    if pid == 0:
        val = pid
    else:
        val = pid
     
    for i in range(5):
        print val
    Out
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    2778
    2778
    2778
    2778
    0
    2778
    0
    0
    0
    0
    L'interpréteur passe de l'un à l'autre.

    Quel est le but en fait ?

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut
    le but est de transférer un fichier créer au debut et son contenu est ce qu'on écrit sur le clavier au moment du raw_input. On doit l'envoyer avec un tube nommé d'ou le client 1 doit écrire sur l'entrée d'un tube nommé et le client 2 reçoit par la sortie d'un tube nommé le contenu du fichier. Et je dois faire la même chose avec un autre client.

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 725
    Par défaut
    Je reste sur votre code et ne rajoute que quelques lignes
    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
    26
    27
    import os
    import sys
    import time
    import client
     
    os.mkfifo("/tmp/moyendecom", 0600)
    os.mkfifo("/tmp/moyendecom2",0600)
    pid = os.fork()
    if pid == 0:
        fif1 = os.open("/tmp/moyendecom", os.O_WRONLY)
        fif4 = os.open("/tmp/moyendecom2", os.O_RDONLY)
        client.client(fif4, fif1)
        print "fils"
        sys.exit(0)
    else:
        fif2 = os.open("/tmp/moyendecom", os.O_RDONLY)
        fif3 = os.open("/tmp/moyendecom2", os.O_WRONLY)
        f_name = os.read(fif2, 1000)
        print "Fils dit: %s" % f_name
        f = os.open(f_name, os.O_RDONLY)
        buff = os.read(f, 1000)
        while (len(buff) > 0):
            os.write(fif3, buff)
            buff = os.read(f, 1000)
        os.unlink("/tmp/moyendecom")
        os.unlink("/tmp/moyendecom2")
        sys.exit(0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import sys
     
    def client(readfd, writefd):
        nomfic = raw_input("entrer le nom d'un fichier : ")
        # envoyer le nom fichier dans le tube vers serveur
        os.write(writefd, nomfic)
        # lire le contenu du fichier dans le tube depuis serveur
        buff = os.read(readfd, 1000)
        while (len(buff) > 0):
            # ecrire du contenu du fichier sur sortie standard
            sys.stdout.write(buff)
            buff = os.read(readfd, 1000)
    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
    patrice@Zeus:~/Bureau$ /usr/bin/python2.6 envoye.py 
    entrer le nom d'un fichier : client.py
    Fils dit: client.py
    import os
    import sys
     
    def client(readfd, writefd):
        nomfic = raw_input("entrer le nom d'un fichier : ")
        # envoyer le nom fichier dans le tube vers serveur
        os.write(writefd, nomfic)
        # lire le contenu du fichier dans le tube depuis serveur
        buff = os.read(readfd, 1000)
        while (len(buff) > 0):
            # ecrire du contenu du fichier sur sortie standard
            sys.stdout.write(buff)
            buff = os.read(readfd, 1000)
    fils
    Mais j'avoue ne pas avoir bien compris le but...

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut
    le but c'est de transférer un fichier à l'aide d'un fifo entre deux clients.

  9. #9
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 725
    Par défaut
    J'avais bien compris cela mais j'aurais fais deux scripts indépendants dans ce cas.
    Voir même le même script en 'client'/'serveur'.

    Sur la première question j'ai penser au module socket (ou xmlrpc) mais comme vous parliez de fichier j'ai essayer d'en savoir plus.

    Une façon simple c'est aussi le tail (facile a faire avec while et yield)

    @+

Discussions similaires

  1. Problème de transfert de fichier avec webutil
    Par aznkd dans le forum Forms
    Réponses: 5
    Dernier message: 06/06/2008, 17h03
  2. Transfert de fichier avec wagon
    Par hugo123 dans le forum Maven
    Réponses: 9
    Dernier message: 24/05/2007, 11h16
  3. transfert de fichier avec un socket
    Par horkets dans le forum Réseau
    Réponses: 2
    Dernier message: 22/10/2006, 12h29
  4. Probleme transfert gros fichier avec webdav
    Par cybernetique dans le forum Apache
    Réponses: 1
    Dernier message: 10/05/2006, 09h53
  5. Transfert de fichier avec TServeurSocket et TClientSocket
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/09/2005, 17h53

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