420 votes

Comment puis-je effacer la console d'interprétation ?

Comme la plupart des développeurs Python, j'ai généralement une fenêtre de console ouverte avec l'interpréteur Python en cours d'exécution pour tester des commandes, dir() des choses, help() des choses, etc.

Comme toute console, après un certain temps, l'historique visible des commandes passées et des impressions devient encombré, et parfois confus lors de la réexécution de la même commande plusieurs fois. Je me demande si, et comment, effacer la console de l'interpréteur Python.

J'ai entendu parler de faire un appel système et soit d'appeler cls sur Windows ou clear sur Linux, mais j'espérais qu'il y avait quelque chose que je pouvais demander directement à l'interpréteur de faire.

Remarque : Je suis sur Windows, donc Ctrl + L ne fonctionne pas.

0 votes

0 votes

Je suis surpris que personne ne l'ait mentionné. Mais lorsque vous utilisez le shell Ipython, vous pouvez faire Ctrl + L même sous Windows

553voto

Ryan Duffield Points 7602

Comme vous l'avez mentionné, vous pouvez effectuer un appel système :

Pour Windows :

>>> import os
>>> clear = lambda: os.system('cls')
>>> clear()

Pour Linux ce serait :

>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()

3 votes

Cette réponse est la plus proche de l'esprit de ce que je demandais, merci.

4 votes

+1, belle réponse. Y a-t-il un moyen de consommer la valeur de retour pour qu'elle ne s'affiche pas ? Je reçois un '0' après avoir exécuté clear.

20 votes

Définissez-le dans une fonction régulière au lieu d'une lambda ne devrait pas montrer '0' car la valeur de retour sera None.

239voto

popcnt Points 1842

Voici quelque chose d'utile qui est un peu plus multiplateforme :

import os

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

# Maintenant, pour effacer l'écran
cls()

0 votes

Super façon de procéder, combinez ceci avec la suggestion lambda ci-dessus pour économiser une ligne de code, pratique comme tout ! Merci ! :)

0 votes

import os os.system('cls')

4 votes

La variable d'environnement TERM n'est pas définie.

94voto

Triptych Points 70247

Eh bien, voici une petite astuce:

>>> clear = "\n" * 100
>>> print clear
>>> ...faire autre chose...
>>> print clear

Ou pour éviter de taper beaucoup, mettez ce fichier dans votre chemin de recherche python:

# wiper.py
class Wipe(object):
    def __repr__(self):
        return '\n'*1000

wipe = Wipe()

Ensuite, vous pouvez faire cela à partir de l'interpréteur autant que vous le souhaitez :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe

16 votes

Haha, c'est plutôt drôle. Pas exactement ce que je cherchais, mais belle tentative.

4 votes

@Triptyque: c = "\n" * 100 utile, +1 pour cela. Un petit commentaire qui nettoie et ramène en bas de la coquille, je préfère commencer depuis le haut de la coquille.

2 votes

Ou, si votre émulateur de terminal interprète le code ANSI, il vaut mieux faire : "\x1B[H\x1B[J"

31voto

martineau Points 21665

Bien que cela soit une ancienne question, je pensais apporter quelque chose qui résume ce que je pense être le meilleur des autres réponses et ajouter une nuance en suggérant de mettre cette (ces) commande(s) dans un fichier et de définir votre variable d'environnement PYTHONSTARTUP pour y pointer. Comme je suis actuellement sur Windows, c'est légèrement biaisé de cette manière, mais cela pourrait facilement être orienté dans une autre direction.

Voici quelques articles que j'ai trouvés qui décrivent comment définir des variables d'environnement sur Windows :
    Quand utiliser sys.path.append et quand modifier %PYTHONPATH% est suffisant
    Comment gérer les variables d'environnement sous Windows XP
    Configuration des variables d'environnement système et utilisateur
    Comment utiliser les variables d'environnement système globales dans Windows

Au fait, ne mettez pas de guillemets autour du chemin du fichier même s'il contient des espaces.

Quoi qu'il en soit, voici mon avis sur le code à mettre (ou à ajouter à votre script Python existant) :

# ==== pythonstartup.py ====

# ajouter quelque chose pour effacer l'écran
class cls(object):
    def __repr__(self):
        import os
        os.system('cls' if os.name == 'nt' else 'clear')
        return ''

cls = cls()

# ==== fin de pythonstartup.py ====

Par ailleurs, vous pouvez également utiliser @Triptych's astuce __repr__ pour changer exit() en simplement exit (et de même pour son alias quit) :

class exit(object):
    exit = exit # objet d'origine
    def __repr__(self):
        self.exit() # appeler l'original
        return ''

quit = exit = exit()

Enfin, voici quelque chose d'autre qui change le premier invite de l'interpréteur de >>> à cwd+>>> :

class Prompt:
    def __str__(self):
        import os
        return '%s >>> ' % os.getcwd()

import sys
sys.ps1 = Prompt()
del sys
del Prompt

0 votes

C'est probablement la meilleure réponse - une combinaison de techniques des autres réponses. PYTHONSTARTUP + repr + os.system('cls'). Très bien.

0 votes

@Triptyque : Un effet secondaire intéressant de l'utilisation de __repr__ et/ou __str__ de cette manière est que si vous tapez >>> vars() à la console de l'interpréteur, il exécutera toutes les commandes ainsi définies. Sur mon système, par exemple, il a effacé l'écran puis a quitté la console. Il m'a fallu un certain temps pour comprendre ce qui se passait....

0 votes

Intéressant. Je vois que ce problème s'applique également à locals() et globals(). Un simple décorateur autour de ces fonctions qui supprime le nom et le réassigne après l'invocation de la fonction est une solution possible...

8voto

Amol Points 65

Wiper est cool. La bonne chose à son sujet est que je n'ai pas à taper '()' autour de lui.

Voici une légère variation à cela

# wiper.py
import os
class Cls(object):
    def __repr__(self):
        os.system('cls')
        return ''

L'utilisation est assez simple:

>>> cls = Cls()
>>> cls # Cela effacera la console.

1 votes

Je nommerais l'instance de la classe Cls comme étant cls. cls = Cls()

0 votes

Sauf que pollue l'espace de nom initial avec deux choses au lieu d'une... deux fois plus.

0 votes

@Amol J'ai utilisé vos techniques et celles des autres dans ma solution. Vous pouvez faire class cls et puis cls=cls().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X