Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Linux-Python] Remplacer une ligne du terminal

Programme linux

Sujet résolu
    26 août 2014 à 12:02:14

    Bonjour,

    Je débute en programmation Python et je me posais une question, je suis en train de créer un petit programme et j'aimerai afficher un "compteur" -> print(str((cpt*100)/seconde)+"% complete") et j'aimerai éviter que mon terminal soit "pollué" par un nombre de lignes incroyables..

    J'aurai aimé faire en sorte que la ligne "1% complete" soit remplacé par "2% complete"... est-ce possible ? si oui comment ?

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 août 2014 à 12:42:17

      Avec le module os, tu peux exécuter une commande bash/batch suivant ta machine. Il suffit d'exécuter la commande bash clear qui te permettra d'"effacer" l'écran:

      import os
      import time
      
      for percent in range(100):
          print("{}% complete".format(percent+1))
          time.sleep(0.3)
          os.system("clear")

      Si tu veux que ton programme soit portable:

      import os
      import time
      
      #'cls' est la commande 'clear' équivalente en batch (windows)
      os_clear_command= 'cls' if os.name == 'nt' else 'clear'
      
      for percent in range(100):
          print("{}% complete".format(percent+1))
          time.sleep(0.3)
          os.system(os_clear_command)

      -
      Edité par Anonyme 26 août 2014 à 12:47:07

      • Partager sur Facebook
      • Partager sur Twitter
        26 août 2014 à 15:56:51

        AlphaZeta a écrit:

        Avec le module os, tu peux exécuter une commande bash/batch suivant ta machine. Il suffit d'exécuter la commande bash clear qui te permettra d'"effacer" l'écran:

        import os
        import time
        
        for percent in range(100):
            print("{}% complete".format(percent+1))
            time.sleep(0.3)
            os.system("clear")

        Si tu veux que ton programme soit portable:

        import os
        import time
        
        #'cls' est la commande 'clear' équivalente en batch (windows)
        os_clear_command= 'cls' if os.name == 'nt' else 'clear'
        
        for percent in range(100):
            print("{}% complete".format(percent+1))
            time.sleep(0.3)
            os.system(os_clear_command)

        -
        Edité par AlphaZeta il y a environ 3 heures


        Et sans supprimer la totalité de mon écran ?

        Je voudrais que sa ressemble un peu à un apt-get update (Quand il fait le chargement) il ne le fait que sur une ligne... :/ c'est possible ou pas ?

        Merci :)

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          26 août 2014 à 17:03:08

          À ce moment là il y a deux solutions:

          • Tu réimprime à chaque fois:
            #!/usr/bin/env python3
            # -*- coding: utf-8 -*-
            
            import os
            import random
            
            #'cls' est la commande 'clear' équivalente en batch (windows)
            os_clear_command= 'cls' if os.name == 'nt' else 'clear'
            
            # Randomizer de string, juste pour l'exemple ö
            steps = ["Installing package {}".format(random.randint(1, 10000)) for _ in range(random.randint(1, 1000))]
            
            done = 0
            
            while done < len(steps):
                os.system(os_clear_command)
                print("\n".join(steps[:done]))
                print("------->   {}% complete".format((done * 100) // len(steps)))
                done += 1
                
            os.system(os_clear_command)         #
            print("\n".join(steps[:done]))      # Pour l'esthétique
            print("------->   100% complete")   #
            
            input("Done")
          • En utilisant le module curses (je sais pas comment mais ça doit être possible)

          -
          Edité par Anonyme 26 août 2014 à 17:11:48

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            26 août 2014 à 17:09:33

            La premiere méthode n'efface pas l'écran
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              26 août 2014 à 17:21:31

              'cls' efface bel et bien l'écran, mais pas 'clear' c'est vrai. T'as une alternative ?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
              Anonyme
                26 août 2014 à 17:29:57

                Bah clear fait l'affaire de toute façon :p
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  26 août 2014 à 19:52:27

                  Salut, le module OS est à éviter autant que possible (ne serait ce que pour des raisons évidentes de sécurité et de portabilité). Pour manipuler le terminal, la solution la plus propre est (comme cité plus haut), le module curses.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 août 2014 à 23:40:55

                    @dri1 a écrit:

                    Salut,
                    le module OS est à éviter autant que possible (ne serait ce que pour des raisons évidentes de sécurité et de portabilité). Pour manipuler le terminal, la solution la plus propre est (comme cité plus haut), le module curses.


                    Ok pour le module curses mais je ne vois pas ce qui peut m'aider... :/ tu pourrais développer ou pas ? :/
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      26 août 2014 à 23:50:25

                      Tu as toutes les infos dont tu as besoin sur la page que j'ai linkée. L'idée est simplement d'utiliser addstr() qui permet de placer du texte à une position précise (il suffit donc de réécrire par dessus l'existant). La seule difficulté est de connaitre ta position actuelle pour se caler au bon endroit, mais tout ce qu'il faut pour ça est ici.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 août 2014 à 0:04:50

                        D'accord merci beaucoup pour tes explications :)

                        Je passe le sujet en résolu grâce à toi ;)

                        Merci encore

                        @+

                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Linux-Python] Remplacer une ligne du terminal

                        × 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