Partage
  • Partager sur Facebook
  • Partager sur Twitter

Actualiser la console

    1 septembre 2010 à 11:46:14

    bonjour à tous je désirerais actualiser ce qui est mit dans le console. Comment faire ?
    exs :un peu comme quand on télécharger un fichier avec WGET ou encore comme une horloge qui ne crée pas une nouvelle ligne à chaque seconde..

    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      1 septembre 2010 à 13:56:50

      Bonjour,

      si j'ai bien compris ce que tu dis, il faut effacer à chaque fois la console.
      import os, sys
      
      for i in range(10):
          print(i)
      #---l'équivalent de 'sleep(1000)' en 'C' ici
          os.system("cls")
      
      • Partager sur Facebook
      • Partager sur Twitter
        1 septembre 2010 à 15:37:36

        oui, mais ca sa supprime tout et pas seulement la dernière ligne :s
        • Partager sur Facebook
        • Partager sur Twitter
          1 septembre 2010 à 16:11:24

          Faut il forcément que se soit en mode 'console' ?
          Que veux-tu faire exactement (Quel est ton projet) ?
          • Partager sur Facebook
          • Partager sur Twitter
            1 septembre 2010 à 16:38:01

            Salut,
            si tu es sous linux tu peux faire ça en jouant avec les caractères spéciaux genre \b qui permet de revenir un caractère en arrière et \r qui revient en début de ligne (les deux laissent affichés les caractères déjà affichés). Par contre c'est assez moche à lire et c'est pas forcément portable (\r est utilisé pour les retours à la ligne normaux sous mac, et pour \b j'en sais rien à vrai dire), y a peut-être un moyen plus joli de faire ça (curses ?).
            Exemple en python 2 :
            # -*- coding: utf8 -*-
            
            import time
            import sys
            
            # affiche "Progression :   0%" puis un espace au lieu d'un retour à la ligne
            print "Progression :   0%",
            for i in xrange(1, 101):
                # met à jour l'affichage (sans attendre un retour à ligne)
                sys.stdout.flush()
                time.sleep(0.1)
                # revient 5 caractères en arrière ("xxx% ") et remplace "xxx% " par "yyy% "
                print "\b" * 5 + str(i).rjust(3) + "%",
            # nouvelle ligne
            print
            
            for i in xrange(0, 101):
                # revient au début de la ligne et écrase ce qui est écrit
                print "\rProgression :", str(i).rjust(3) + "%",
                # met à jour l'affichage (sans attendre un retour à ligne)
                sys.stdout.flush()
                time.sleep(0.1)
            # nouvelle ligne
            print
            

            En python 3 :
            # -*- coding: utf8 -*-
            
            import time
            import sys
            
            print("Progression :   0%", end="")
            for i in range(1, 101):
                sys.stdout.flush()
                time.sleep(0.1)
                print("\b" * 4, str(i).rjust(3), "%", sep="", end="")
            print()
            
            for i in range(0, 101):
                print("\rProgression :", str(i).rjust(3) + "%", end="")
                sys.stdout.flush()
                time.sleep(0.1)
            print()
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              1 septembre 2010 à 17:11:51

              Bonjour,

              Dentuk, ton exemple fonctionne sous windôbs mais si tu utilise le retour "\r" à la fin de la ligne, tu n'es pas obligé de forcer l'affichage avec stdout.flush() . ;)

              Exemple avec Python 3 :
              from time import sleep
              
              for i in range(100):
                  print("progress: {}% \r".format(str(i).rjust(3)), end="")
                  sleep(0.3)
              


              Je me demandais aussi, s'il n'est pas possible d'ouvrir stdout en lecture ? Car, après tout, il s'agit bien d'un fichier non ? :euh:
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                1 septembre 2010 à 17:22:19

                Quelqu'un peut m'expliquer ce que demande le PO, car j'ai rien compris, enfin avec les codes de dentuk un peu, on va dire, mais bon...

                C'est quoi, une barre de progression en console c'est ça?

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  1 septembre 2010 à 17:33:28

                  La "progress-barre" était juste un exemple... :-°

                  L'idée était, je crois, de ne pas créer une nouvelle ligne à chaque affichage (réecrire sur la même ligne en console).
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    1 septembre 2010 à 17:36:23

                    ok je comprend, merci! :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Actualiser la console

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown