Partage
  • Partager sur Facebook
  • Partager sur Twitter

Effacer l'écran de la console

de façon à ce que le programme soit portable

Sujet résolu
Anonyme
    28 juillet 2014 à 12:09:12

    Salut,

    Travaillant à la fois sur Linux, Mac et Windows, j'aimerais trouver un manière d'effacer l'écran du shell sur chacun de ces OS sans avoir à changer à chaque fois mon programme. J'ai déjà essayer d'écrire une fonction qui détecte l'OS et qui efface l'écran en utilisant la commande appropriée à l'OS:

    def cls():
        if os.name == "posix":
            os.system("clear")
        else:
            os.system("cls")

    Mais le problème est que os.name renvoie une valeur qui change en fonction de la distrib et de la version de l'OS. Ce que je voudrais donc savoir c'est est-ce qu'il existerait une fonction me permettant de séparer les OS entre Windows, Linux et Mac.

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 juillet 2014 à 18:03:08

      Utilise sys.plateform
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        28 juillet 2014 à 18:14:32

        Idem. Le retour change en fonction de la version.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          28 juillet 2014 à 18:48:17

          Voilà comment je procède personnellement :

          import os
          
          os.system('cls' if os.name == 'nt' else 'clear')

          Une ligne simple et c'est réglé !

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            28 juillet 2014 à 18:56:46

            J'y avais pas pensé merci !
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              28 juillet 2014 à 19:05:33

              Idem. Le retour change en fonction de la version.

              C'est pas ce que dit la doc en tout cas

              Tu n'as que 4 choix possibles !

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                28 juillet 2014 à 19:08:16

                Ouep et j'ai trouvé pourquoi chez moi c'était différent:

                Changed in version 3.3: On Linux, sys.platform doesn’t contain the major version anymore. It is always 'linux', instead of 'linux2' or 'linux3'.

                J'avais update Python pas sur tous les OS

                -
                Edité par Anonyme 28 juillet 2014 à 19:09:03

                • Partager sur Facebook
                • Partager sur Twitter
                  31 juillet 2014 à 11:24:31

                  Et si on ne veut effacer qu'une partie de l'écran (dans le cadre d'une barre de progression) y a t il une méthode miracle ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                  Anonyme
                    31 juillet 2014 à 11:48:51

                    C'est à dire ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 juillet 2014 à 11:53:18

                      c'est a dire que l'on a en console ceci : [                       ]

                      puis une seconde apres :                      [>                     ]

                      puis ancore une autre seconde apres : [->                    ]

                      mais que a chaque fois, juste cette barre de progressnion est effacée et refaite car j'aurais des informations en haut sur le fichier et la taille

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                      Anonyme
                        31 juillet 2014 à 12:15:32

                        Je sais pas si ça te convient:

                        #!/usr/bin/env python3
                        # -*- coding: utf-8 -*-
                        
                        import time
                        import random
                        import sys
                        import os
                        
                        os_clear_command = 'cls' if sys.platform == 'win32' else 'clear' # Merci pour le tuyau
                        
                        class LoadingBar(object): 
                            def __init__(self, data, max_length):
                                self.length = 1
                                self.max_length = max_length
                                self.data = data
                                
                            def __repr__(self): return self.data + "\n\n" + "[" + "-" * (self.length-1) + ">" + " " * (self.max_length - self.length) + "]" # C'est peu brouillon désolé
                            
                            def next(self): # Méthode appelée pour que la barre progresse
                                if self.length <= self.max_length:
                                    self.length += 1
                            
                            def is_not_full(self): # Pas besoin d'expliquer
                                return False if self.length == self.max_length else True # Notation cool
                                
                        load = LoadingBar("J'aime les pâtes!", 30)
                        
                        while load.is_not_full():
                            os.system(os_clear_command)
                            print(load)
                            time.sleep(random.uniform(0.0, 1.0))
                            load.next()
                        input()

                        -
                        Edité par Anonyme 31 juillet 2014 à 12:17:35

                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 juillet 2014 à 12:42:47

                          Merci ca me convient très bien ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                          Anonyme
                            31 juillet 2014 à 16:10:59

                            Tu m'as dit sur un autre post que mon programme s'arrêtait à 5648 si tu au constructeur une longueur de 1,000,000,000. D'abord, pourquoi tu voudrais faire une barre de chargement de un milliard de longueur ? o_O

                            Edit: oups j'ai rien dit

                            -
                            Edité par Anonyme 31 juillet 2014 à 16:16:41

                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 juillet 2014 à 16:19:49

                              Pour tester l'inifini et une méthode de chargement (en avance d'un '-' si on a effectué tant d'actions) pour un futur serveur FTP envoie, recoit.

                              Mais je pense que c'est parce que j'ai mis int et pas long ou float que ca stop à 5648.

                              -
                              Edité par Asyncore 31 juillet 2014 à 16:20:31

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                31 juillet 2014 à 16:32:32

                                "Mais je pense que c'est parce que j'ai mis int et pas long ou float que ca stop à 5648."


                                En 3.X, il n'y a plus cette distinction entre type long() et type int(). Sinon en 2.7, le type int() à une taille quand même supérieure à 5648.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Précepte: Le mieux est l'ennemi du bien
                                Anonyme
                                  31 juillet 2014 à 16:32:47

                                  Asyncore a écrit:

                                  Mais je pense que c'est parce que j'ai mis int et pas long ou float que ca stop à 5648


                                  Non. Le type long n'existe pas en Python 3. Mis à part, de quelles actions veux-tu parler ?

                                  Edit: grilled

                                  -
                                  Edité par Anonyme 31 juillet 2014 à 16:33:10

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    31 juillet 2014 à 16:42:42

                                    De l'incrémentation d'un nombre x jusqu'à ce qu'il atteigne y et je vérifie si x par le modulo donne 0, si oui, je fais avancer la barre. A chaque tour de boucle j'écris le nouveau nombre dans un fichier mais voilà, je suis stopé à 5648.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                    Anonyme
                                      31 juillet 2014 à 16:46:35

                                      J'ai RIEN compris :lol:, c'est quoi ton but dans un premier temps ?

                                      -
                                      Edité par Anonyme 31 juillet 2014 à 16:46:59

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        31 juillet 2014 à 16:59:09

                                        Bon alors je recommence : mon code :

                                        # -*- coding: utf-8 -*-
                                         
                                        import time
                                        import random
                                        import sys
                                        import os
                                         
                                        os_clear_command = 'cls' if sys.platform == 'win32' else 'clear' # Merci pour le tuyau
                                         
                                        class LoadingBar(object):
                                            def __init__(self, data, max_length):
                                                self.length = 1
                                                self.max_length = max_length
                                                self.data = data
                                                 
                                            def __repr__(self): return self.data + "\n\n" + "[" + "-" * (self.length-1) + ">" + " " * (self.max_length - self.length) + "]"
                                        	# C'est peu brouillon désolé
                                             
                                            def next(self): # Méthode appelée pour que la barre progresse
                                                if self.length <= self.max_length:
                                                    self.length += 1
                                             
                                            def is_not_full(self): # Pas besoin d'expliquer
                                                return False if self.length == self.max_length else True # Notation cool
                                        
                                        print("Entrez deux nombres en appuyant sur 'Entrée' entre chaque saisie de nombre :")
                                        nombre_1 = input("> ")
                                        nombre_1 = int(nombre_1)
                                        nombre_2 = input("> ")
                                        nombre_2 = int(nombre_2)
                                        infinite = open("infinite.txt", "a")
                                        load = LoadingBar("{0} |-------> {1}".format(nombre_1, nombre_2), 78)
                                        
                                        try:
                                            while load.is_not_full() and nombre_1 < nombre_2:
                                                infinite.write("{0}\n".format(nombre_1))
                                                nombre_1 += 1
                                                os.system(os_clear_command)
                                                print(load)
                                                if nombre_1 % 78 == 0:
                                                    load.next()
                                        
                                        except NameError as nom_err:
                                            print(nom_err)
                                        except TypeError as type_err:
                                            print(type_err)
                                        
                                        input()
                                        infinite.close()

                                        J'ai iséré ton code d'effacement, il fonctionne parfaitement (encore merci).

                                        Ce que je veux c'est que l'on entre 2 nombres. Moi je vais faire une boucle pour parcourir cet 'interval' et écrire tout les nombres de cet 'interval' dans un fichier. Si je fais 1 puis 1000'000'000, le programme n'iras que jusqu'à 5648. Tu peux essayer si tuveux comporendre le fonctionnement de la barre de progresse ici (je l'ai un chuya modifiée).

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                        Anonyme
                                          31 juillet 2014 à 17:01:31

                                          En quoi tu as besoin d'une barre de chargement ici ?

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            31 juillet 2014 à 17:05:06

                                            Voir la vitesse d'écriture dans un fichier mais comme je l'ai dit, c'est un test pour ensuite l'utiliser autre part (pour un serveur FTP)

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                            Anonyme
                                              31 juillet 2014 à 17:23:06

                                              Mon dieu mais c'est moche tout ça (pas besoin de clear, cls, ...), il y a plus simple

                                              import time, sys
                                              for i in range(100):
                                                  time.sleep(1)
                                                  print("\b\b{}%".format(i), end='')
                                                  sys.stdout.flush()
                                              



                                              -
                                              Edité par Anonyme 31 juillet 2014 à 17:24:11

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                31 juillet 2014 à 17:44:51

                                                @oldProgrammer: Je ne crois pas que c'est ce qu'attend Asyncore, mais sur mon ordi (sous Mac -no comment-) ça marche pas le sys.stdout.flush(). Asyncore tient à mettre de toute façon une barre de chargement (va savoir pourquoi).

                                                @Asyncore: Voilà une amélioration de la classe LoadingBar, qui affiche la barre de chargement en pourcentage donc pas de barre interminable:

                                                #!/usr/bin/env python3
                                                # -*- coding: utf-8 -*-
                                                
                                                import time
                                                import random
                                                import sys
                                                import os
                                                
                                                os_clear_command = 'cls' if sys.platform == 'win32' else 'clear'
                                                
                                                class LoadingBar(object):
                                                    def __init__(self, data, max_value, max_length=78):
                                                        self.length = 1
                                                        self.max_value = max_value
                                                        self.max_length = max_length
                                                        self.data = data
                                                        self.amount = lambda: int((((100 * self.length) / self.max_value) / 100) * self.max_length)
                                                    
                                                    def __repr__(self): return "{}\n\n[{}]".format(self.data, ("█" * self.amount()) +  "░" * (self.max_length - self.amount()))
                                                    
                                                    def next(self):
                                                        if self.length <= self.max_value:
                                                            self.length += 1
                                                    
                                                    def is_not_full(self):
                                                        return False if self.length == self.max_value else True
                                                        
                                                min = int(input("MIN>"))        
                                                sup = int(input("SUP>"))    
                                                
                                                load = LoadingBar("{} ---> {}".format(min, sup), sup+1)
                                                
                                                with open("infinite.txt", 'w') as infinite:
                                                    infinite.write("")
                                                    infinite.close()
                                                
                                                with open("infinite.txt", 'a') as infinite:
                                                    infinite.write("{}\n".format(min))
                                                    while (load.is_not_full()) and (min <= sup):
                                                
                                                        min += 1
                                                        infinite.write("{}\n".format(min))
                                                
                                                        os.system(os_clear_command)
                                                        load.next()
                                                        print(load)
                                                    infinite.close()
                                                    input("Appuyez sur <Entrée> pour continuer...")

                                                -
                                                Edité par Anonyme 31 juillet 2014 à 17:48:09

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  31 juillet 2014 à 17:55:25

                                                  Ok merci beaucoup mais en testant, on voit que la barre ne change pas de taille . . .

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                                  Anonyme
                                                    31 juillet 2014 à 17:59:17

                                                    C'est le principe ^^. Mais mon code marche non ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      31 juillet 2014 à 18:01:53

                                                      oui parfaitement

                                                      je pense que c'est parce que tu n'utilises pas le modulo

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                                      Anonyme
                                                        31 juillet 2014 à 18:23:29

                                                        Non c'est parce que je fais ce calcul: 

                                                        self.amount = lambda: int((((100 * self.length) / self.max_value) / 100) * self.max_length)
                                                             
                                                            def __repr__(self): return "{}\n\n[{}]".format(self.data, ("█" * self.amount()) +  "░" * (self.max_length - self.amount

                                                        qui calcule le pourcentage effectué et transforme ça en chaine de caractère.

                                                        Edit: je pensais que tu parlais du fait que ma barre était de la même taille...

                                                        -
                                                        Edité par Anonyme 31 juillet 2014 à 18:38:30

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          31 juillet 2014 à 18:40:29

                                                          Et comment s'affiche t elle ? Je ne voie ni print ni nombre dans la console lors de l execution
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
                                                          Anonyme
                                                            31 juillet 2014 à 18:48:30

                                                            Ben si elle s'affiche (ligne 46).
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              31 juillet 2014 à 18:51:06

                                                              Pas chez moi, je n'ai qu'un trait . . .
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !

                                                              Effacer l'écran de 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