Comment effacer la console interprète?

325

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

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

J'ai entendu parler d'un appel système et d'un appel clssur Windows ou clearsur Linux, mais j'espérais qu'il y aurait quelque chose que je pourrais commander à l'interprète lui-même.

Remarque: je fonctionne sous Windows, donc Ctrl+Lcela ne fonctionne pas.

Soviut
la source
Solution IPython ici: stackoverflow.com/questions/6892191/…
onewhaleid
Je suis surpris que personne ne l'ait mentionné. Mais lorsque vous utilisez le shell Ipython, vous pouvez faire Ctrl + L même dans Windows
user93

Réponses:

443

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

Pour les fenêtres

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

Pour Linux, le lambda devient

>>> clear = lambda: os.system('clear')
Ryan Duffield
la source
1
Cette réponse est la plus proche de «l'esprit» de ce que je demandais, merci.
Soviut
1
+1, belle réponse. Existe-t-il un moyen de consommer la valeur de retour afin qu'elle ne s'affiche pas? J'obtiens un «0» après avoir exécuté clairement.
technomalogical
15
Définissez-le dans une fonction régulière au lieu de lambda ne doit pas afficher «0» car la valeur de retour sera None.
Akbar ibrahim
46
Quel est le problème avec l'utilisation def? Pourquoi utiliser un lambdaquand un defest plus clair?
S.Lott
17
@Akbaribrahim car None ne sera pas imprimé essayez ceci:clear = lambda: os.system('cls') or None
enpenax
193

ici quelque chose de pratique qui est un peu plus multiplateforme

import os

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

# now, to clear the screen
cls()
popcnt
la source
Excellente façon de procéder, combinez cela avec la suggestion lambda ci-dessus pour enregistrer une ligne de code, très pratique! Je vous remercie! :)
Torxed
import os os.system('cls')
Do Nhu Vy
1
Variable d'environnement TERM non définie.
Jonathan
87

Eh bien, voici un petit hack:

>>> clear = "\n" * 100
>>> print clear
>>> ...do some other stuff...
>>> print clear

Ou pour enregistrer quelques saisies, placez 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 tout cela à partir de l'interprète :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe
Triptyque
la source
12
Haha, c'est assez drôle. Pas exactement ce que je cherchais, mais bien essayé.
Soviut
4
@Triptych: c = "\ n" * 100 utile, +1 pour cela. Un petit commentaire qu'il efface et apporte au fond de la coque, je préfère partir du haut de la coque.
pythonbeginer
1
Ou, si votre émulateur de terminal interprète ANSI, mieux vaut:"\x1B[H\x1B[J"
Alba Mendez
8
En dépit de rire les gens, l' impression d' un grand nombre de nouvelles lignes est exactement ce que les processus externes clearet clsfaire. C'est la façon de le faire. (juste une impression, ou une fonction avec l'appel d'impression, n'assignant pas à une chaîne "claire", bien sûr)
jsbueno
4
@jsbueno non ce n'est pas. Eh bien peut-être sur Windows (même si j'en doute, il a des API pour effacer la console). Sur tous les autres systèmes, clearaffiche une directive qui efface l'écran. Sans supprimer le tampon de défilement. Sur mon système, il émet cette séquence de commande: \33[3J\33[H\33[2J. C'est: [erase scrollback] [reset cursor position] [erase screen]. Le [erase scrollback]peut être omis à l'aide de clear -x.
spectras
28

Bien qu'il s'agisse d'une question plus ancienne, j'ai pensé contribuer quelque chose résumant ce que je pense être les meilleures des autres réponses et ajouter une ride en suggérant que vous mettiez ces commandes dans un fichier et définissiez votre PYTHONSTARTUP variable d'environnement pour pointer vers elle. Étant donné que je suis actuellement sur Windows, il est légèrement biaisé de cette façon, mais pourrait facilement être incliné 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 lors de la modification de% PYTHONPATH% est suffisant
    Comment gérer les variables d'environnement dans Windows XP
    Configurer les variables d'environnement système et utilisateur
    Comment utiliser le système global Variables d'environnement dans Windows

BTW, ne mettez pas de guillemets autour du chemin d'accès au fichier même s'il contient des espaces.

Quoi qu'il en soit, voici mon point de vue sur le code à insérer (ou à ajouter à votre script de démarrage Python existant):

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

# add something to clear the screen
class cls(object):
    def __repr__(self):
        import os
        os.system('cls' if os.name == 'nt' else 'clear')
        return ''

cls = cls()

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

BTW, vous pouvez également utiliser l' __repr__ astuce de @ Triptych pour changer exit()en juste exit(et idem pour son alias quit):

class exit(object):
    exit = exit # original object
    def __repr__(self):
        self.exit() # call original
        return ''

quit = exit = exit()

Enfin, la chose d'ici autre chose qui change l'interprète principal de l' invite >>>à CWD + >>>:

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

import sys
sys.ps1 = Prompt()
del sys
del Prompt
martineau
la source
C'est probablement la meilleure réponse - une combinaison de techniques d'autres réponses. PYTHONSTARTUP + repr + os.system ('cls'). Très agréable.
Triptyque du
@Triptych: Un effet secondaire intéressant de l'utilisation __repr__et / ou de __str__cette façon est que si vous tapez >>> vars()sur la console interprète, 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. Cela m'a pris un certain temps pour comprendre ce qui se passait ...
Martineau
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éattribue après l'invocation de la fonction est une solution possible ...
Triptyque
@Triptych: L'idée de décorateur ne semble pas fonctionner, du moins avec mes propres tentatives. Trouver une alternative viable s'avère difficile à surprendre.
martineau
J'ai une solution candidate qui résout simplement le résultat des appels vars () globals () et locals () temporairement: gist.github.com/4172781
Triptyque
28

Vous avez plusieurs façons de le faire sur Windows:

1. Utilisation du raccourci clavier:

Press CTRL + L

2. Utilisation de la méthode d'appel système:

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

3. En utilisant une nouvelle ligne, imprimez 100 fois:

cls = lambda: print('\n'*100)
cls()
Vlad Bezden
la source
5
Toutes ces façons sont assez ... naff. clsne fonctionnera que sur Windows et rendra votre programme difficile à newlinesmultiplier , l'impression 100 est juste ... eww? Et un raccourci clavier n'est pas utilisé dans le programme.
Luke
22

Le moyen le plus rapide et le plus simple est sans aucun doute Ctrl+L .

C'est la même chose pour OS X sur le terminal.

Alex K
la source
3
J'ai essayé cette solution en utilisant "L" majuscule ou minuscule avec la touche ctrl sur Windows 8.1. Ça ne marche pas pour moi. Je viens d'ouvrir et de fermer la fenêtre du shell pour l'effacer.
Chris22
2
Sous OS X, Ctrl + L remplira le terminal jusqu'à ce que l'affichage soit clair. Vous pouvez toujours faire défiler vers le haut pour voir l'historique. Utilisez Cmd + K pour effacer l'historique d'affichage et d'impression. Une liste plus complète des raccourcis clavier du terminal OS X
Andrew Franklin
2
Fonctionne à merveille pour moi dans Ubuntu Desktop 16
Nam G VU
15

ma façon de faire est d'écrire une fonction comme ceci:

import os
import subprocess

def clear():
    if os.name in ('nt','dos'):
        subprocess.call("cls")
    elif os.name in ('linux','osx','posix'):
        subprocess.call("clear")
    else:
        print("\n") * 120

puis appelez clear()pour effacer l'écran. cela fonctionne sur windows, osx, linux, bsd ... tous les OS.

MartinUbuntu
la source
Vous pourriez vouloir dire os.name in ('linux','osx'), et vous pourriez également vouloir ajouter 'posix'aussi.
rsanden
@rsanden 'linux' et 'osx' couvre à peu près tous les utilisateurs du système d'exploitation réellement.
MartinUbuntu
J'utilise Ubuntu 15.04, et os.name == 'posix'en python 2.7.9 et 3.4.3
rsanden
@rsanden a ajouté posix.
MartinUbuntu
9

Voici un extrait de version multiplateforme (Windows / Linux / Mac / probablement d'autres que vous pouvez ajouter dans la vérification if) que j'ai fait en combinant les informations trouvées dans cette question:

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

Même idée mais avec une cuillère de sucre syntaxique:

import subprocess   
clear = lambda: subprocess.call('cls||clear', shell=True)
clear()
Pitto
la source
8

L'essuie-glace est cool, c'est une bonne chose, je n'ai pas besoin de taper '()' autour. Voici une légère variation

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

L'utilisation est assez simple:

>>> cls = Cls()
>>> cls # this will clear console.
Amol
la source
2
Je le nommerais class cls.
martineau
1
Je nommerais l'instance de l' class Clsêtre cls. cls = Cls()
Amol
Sauf que cela pollue l'espace de noms initial avec deux choses au lieu d'une ... deux fois plus.
martineau
@Amol J'ai utilisé les techniques de la vôtre et des autres dans ma solution . Vous pouvez le faire class clset ensuite cls=cls().
Alba Mendez
8

C'est la chose la plus simple que vous puissiez faire et elle ne nécessite aucune bibliothèque supplémentaire. Il effacera l'écran et retournera >>>dans le coin supérieur gauche.

print("\033[H\033[J")
Denis Rasulev
la source
Cela a l'avantage qu'il fonctionne également dans Spyder.
Graham G
7

pour l'utilisateur mac dans le type de console python

import os
os.system('clear')

Pour les fenêtres

os.system('cls')
yubaraj poudel
la source
5

Voici la solution définitive qui fusionne toutes les autres réponses . Fonctionnalités:

  1. Vous pouvez copier-coller le code dans votre shell ou script.
  2. Vous pouvez l' utiliser comme vous le souhaitez:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Vous pouvez l' importer en tant que module:

    >>> from clear import clear
    >>> -clear
  4. Vous pouvez l' appeler comme un script:

    $ python clear.py
  5. C'est vraiment multiplateforme ; si elle ne peut pas reconnaître votre système
    ( ce, nt, dosou posix) il retombera à l' impression des lignes vides.


Vous pouvez télécharger le fichier [complet] ici: https://gist.github.com/3130325
Ou si vous cherchez simplement le code:

class clear:
 def __call__(self):
  import os
  if os.name==('ce','nt','dos'): os.system('cls')
  elif os.name=='posix': os.system('clear')
  else: print('\n'*120)
 def __neg__(self): self()
 def __repr__(self):
  self();return ''

clear=clear()
Alba Mendez
la source
5

Je ne sais pas si le "shell" de Windows le supporte, mais sous Linux:

print "\033[2J"

https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes

À mon avis, appeler clsavec osest généralement une mauvaise idée. Imaginez si je parviens à modifier la commande cls ou clear sur votre système et que vous exécutez votre script en tant qu'administrateur ou root.

Peter G. Marczis
la source
Je suis d'accord que cls n'est pas idéal dans ce cas, et une séquence d'échappement ANSI est meilleure. En particulier, utiliser os pour invoquer un nouveau processus est une opération assez coûteuse, par rapport à pousser quelques octets vers stdout.
silviot
5

J'utilise iTerm et l'application de terminal native pour Mac OS.

Je presse juste ⌘ + k

Jorge E. Hernández
la source
4

Utilisez ralenti. Il a de nombreuses fonctionnalités pratiques. Ctrl+F6, par exemple, réinitialise la console. La fermeture et l'ouverture de la console sont de bons moyens de l'effacer.

S.Lott
la source
comment faites-vous cela au ralenti? Fermez et rouvrez?
Andrea Ambu
5
Non, F6ne réinitialise pas la console inactive, cependant CTRL+F6. Malheureusement, cela n'efface pas l'écran. Oh! (Python Win32 Idle versions 2.6.2, 2.7.1, 3.2).
ridgerunner
2

J'utilise MINGW / BASH sur Windows XP, SP3.

(collez-le dans .pythonstartup)
# Mon ctrl-l a déjà un peu fonctionné, mais cela pourrait aider quelqu'un d'autre
# laisse une invite au bas de la fenêtre ...
import import readline
readline.parse_and_bind ('\ Cl: clear-screen')

# Cela fonctionne dans BASH parce que je l'ai aussi dans .inputrc, mais pour une
raison #, il est supprimé lorsque je vais dans Python
readline.parse_and_bind ('\ Cy: kill-whole-line')


Je ne pouvais plus supporter de taper 'exit ()' et j'étais ravi des astuces de martineau / Triptych:

Je l'ai légèrement trafiqué (collé dans .pythonstartup)

class exxxit():
    """Shortcut for exit() function, use 'x' now"""
    quit_now = exit # original object
    def __repr__(self):
        self.quit_now() # call original
x = exxxit()

Py2.7.1>help(x)
Help on instance of exxxit in module __main__:

class exxxit
 |  Shortcut for exit() function, use 'x' now
 |
 |  Methods defined here:
 |
 |  __repr__(self)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  quit_now = Use exit() or Ctrl-Z plus Return to exit
AAAfarmclub
la source
2

La commande OS clearsous Linux et clsWindows génère une "chaîne magique" que vous pouvez simplement imprimer. Pour obtenir la chaîne, exécutez la commande avec popen et enregistrez-la dans une variable pour une utilisation ultérieure:

from os import popen
with popen('clear') as f:
    clear = f.read()

print clear

Sur ma machine, la chaîne est '\x1b[H\x1b[2J'.

larsr
la source
1
1) Cette chaîne magique est une séquence ANSI . \x1b[Hsignifie "déplacer le curseur dans le coin supérieur gauche", \x1b[2Jsignifie "effacer tout l'écran". 2) Dans Windows, ANSI n'est pas reconnu, il n'y a donc probablement pas de chaîne magique.
Alba Mendez
1
Cool! Aussi, pour python3 print ('\ x1b [H \ x1b [2J', end = ''); peut aider à éviter la nouvelle ligne devant.
DenMark
La chaîne magique a fonctionné sur la console Microsoft Windows 10 avec Python 3.6 pour moi. J'ai plussed pour la séquence de chaînes pas l'utilisation de avec ouvert.
DevPlayer
2

Voici deux belles façons de procéder:

1.

import os

# Clear Windows command prompt.
if (os.name in ('ce', 'nt', 'dos')):
    os.system('cls')

# Clear the Linux terminal.
elif ('posix' in os.name):
    os.system('clear')

2.

import os

def clear():
    if os.name == 'posix':
        os.system('clear')

    elif os.name in ('ce', 'nt', 'dos'):
        os.system('cls')


clear()
userend
la source
Si os.name n'en fait pas partie, pourquoi ne pas revenir à l'impression de lignes vides?
Alba Mendez
Si c'est Jython, je veux que vous sachiez que os.name = 'java'
iChux
Cela semble bon, cela signifie-t-il que le programme peut devenir multiplateforme?
Luke
2

Si c'est sur mac, alors un simple cmd + kdevrait faire l'affaire.

CoderChai
la source
2

La façon la plus simple est d'utiliser le module os

>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()
Bhaskar Mishra
la source
1

Cela devrait être multiplateforme, et utilise également le préféré subprocess.callau lieu de os.systemselon les os.systemdocuments . Devrait fonctionner en Python> = 2.4.

import subprocess
import os

if os.name == 'nt':
    def clearscreen():
        subprocess.call("cls", shell=True)
        return
else:
    def clearscreen():
        subprocess.call("clear", shell=True)
        return
Gland
la source
1

Que diriez-vous de cela pour un clair

- os.system('cls')

C'est à peu près aussi court que possible!

Dennis Kean
la source
oui, mais pas multiplateforme et vous devez le retaper à chaque fois que vous voulez effacer l'écran.
Alba Mendez
1

Je suis nouveau sur python (vraiment vraiment nouveau) et dans l'un des livres que je lis pour me familiariser avec le langage qu'ils enseignent comment créer cette petite fonction pour effacer la console du backlog visible et des commandes et impressions passées:

Ouvrez le shell / Créez un nouveau document / Créez une fonction comme suit:

def clear():
    print('\n' * 50)

Enregistrez-le dans le dossier lib dans votre répertoire python (le mien est C: \ Python33 \ Lib) La prochaine fois que vous voudrez effacer votre console, appelez simplement la fonction avec:

clear()

c'est tout. PS: vous pouvez nommer votre fonction comme vous le souhaitez. Iv 'a vu des gens utiliser "wiper" "wipe" et variations.

Adriana
la source
1

J'utilise Spyder (Python 2.7) et pour nettoyer la console d'interprétation j'utilise soit

%clair

cela oblige la ligne de commande à aller en haut et je ne verrai pas les anciennes commandes précédentes.

ou je clique sur "option" dans l'environnement de la console et sélectionne "Redémarrer le noyau" qui supprime tout.

Youness
la source
1

Entrez simplement

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X
Anonyme
la source
1

Si vous n'avez pas besoin de le faire via le code, appuyez simplement sur CTRL + L

Steven Tautonico
la source
Oui, cela fonctionne, mais que se passe-t-il si vous souhaitez créer une commande dans votre fichier python qui efface la console, vous ne feriez pas simplement taper quelque chose par l'utilisateur, puis lui dire de l'effacer lui-même. vous effaceriez la console via le code.
madzen
1

Arch Linux (testé xfce4-terminalavec Python 3):

# Clear or wipe console (terminal):
# Use: clear() or wipe()

import os

def clear():
    os.system('clear')

def wipe():
    os.system("clear && printf '\e[3J'")

... ajouté à ~/.pythonrc

  • clear() efface l'écran
  • wipe() efface tout le tampon du terminal
Victoria Stuart
la source
0

EDIT: Je viens de lire "Windows", c'est pour les utilisateurs de Linux, désolé.


En bash:

#!/bin/bash

while [ "0" == "0" ]; do
    clear
    $@
    while [ "$input" == "" ]; do
        read -p "Do you want to quit? (y/n): " -n 1 -e input
        if [ "$input" == "y" ]; then
            exit 1
        elif [ "$input" == "n" ]; then
            echo "Ok, keep working ;)"
        fi
    done
    input=""
done

Enregistrez-le sous "whatyouwant.sh", chmod + x puis exécutez:

./whatyouwant.sh python

ou autre chose que python (inactif, peu importe). Cela vous demandera si vous voulez réellement quitter, sinon il réexécutera python (ou la commande que vous avez donnée en paramètre).

Cela effacera tout, l'écran et toutes les variables / objets / tout ce que vous avez créé / importé en python.

En python, tapez simplement exit () lorsque vous souhaitez quitter.

Andrea Ambu
la source
0

OK, c'est donc une réponse beaucoup moins technique, mais j'utilise le plugin Python pour Notepad ++ et il s'avère que vous pouvez simplement effacer la console manuellement en cliquant avec le bouton droit dessus et en cliquant sur "effacer". J'espère que cela aide quelqu'un là-bas!

guest12345
la source