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 :

Afficher les résultat d'un 'Process' dans la console


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut Afficher les résultat d'un 'Process' dans la console
    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 multiprocessing
    import time
     
    class ClockProcess(multiprocessing.Process):
          def __init__(self,interval):
                multiprocessing.Process.__init__(self)
                self.interval = interval
          def run(self):
                while True:
                       print("The time is %s" % time.ctime())
                       time.sleep(self.interval)
     
    if __name__ == '__main__':
           p = ClockProcess(15)
           p.start()
    Lorsque que j'exécute ce code tiré de 'Python essential reference', l'heure est affichée à interval régulié dans la console.
    Pourtant la console et le 'Process' n'ont pas le même PID?
    Le 'Process' hérite t'il donc du stdout de la console?

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    C'est le rôle de print de rediriger vers la sortie ad hoc selon l'environnement sous lequel il tourne.

    Si le code est exécuté en tant que démon, par exemple, les print seront dirigés automatiquement vers le log du gestionnaire de démon.

    Exemple sous Linux avec cron comme gestionnaire de démon, l'heure printée par ton script s'inscrira dans /var/mail/user parce que Python les redirige vers cron qui, lui, utilise ce log comme sortie standard.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut
    Bonjour,
    Si je comprend bien, en redéfinissant stdout du processus parent, les processus enfants écriront tout seul sur cette nouvelle sortie?

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut
    En modifiant le code comme suit, le 'process' ouvre bien un fichier en écriture mais je n'y trouve rien d'écrit après interruption du programme. Pourquoi?

    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
    import multiprocessing
    import time
    import sys
     
    class ClockProcess(multiprocessing.Process):
    	def __init__(self,interval):
    		self.f = open("tmp","w+")
    		multiprocessing.Process.__init__(self)
    		self.interval = interval
    	def run(self):
    		while True:
    			self.f.write("The time is %s" % time.ctime())
    			time.sleep(self.interval)
     
    if __name__ == '__main__':
    	p = ClockProcess(1)
    	p.start()
    Par contre j'ai la réponse à ma question précédente. En redéfinissant stdout dans __main__, le 'process' écrit en conscéquence.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    En fait ta question impliquait print et ma réponse décrivait le comportement de print uniquement, ici tu utilise fileobject.write() ce qui n'est pas pareil.


    Le problème d'écriture provient semble-t-il de la façon dont tu ouvres le fichier.

    Ton code fonctionne très bien en le modifiant ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        def run(self):
            with open("tmp","a") as f:
                while True:
                    f.write("The time is %s\n" % time.ctime())
                    time.sleep(self.interval)

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par défaut
    Merci!
    En modifiant le code comme suit, j'obtiens également un bon résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def run(self):
    		while True:
    			with open("tmp","a") as f:
    				print >>f, "The time is %s" % time.ctime()
    				time.sleep(self.interval)

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

Discussions similaires

  1. [XL-2003] Afficher les résultats d'une macro dans une fenêtre popup
    Par sphyncks dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2009, 09h39
  2. Réponses: 6
    Dernier message: 18/09/2007, 17h10
  3. Réponses: 14
    Dernier message: 28/04/2007, 12h25
  4. Réponses: 7
    Dernier message: 18/01/2007, 15h03
  5. Réponses: 7
    Dernier message: 21/09/2006, 08h44

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