¿Cómo borrar la consola del intérprete?

325

Como la mayoría de los desarrolladores de Python, normalmente mantengo una ventana de consola abierta con el intérprete de Python ejecutándose para probar comandos, dir()cosas help() stuff, etc.

Al igual que cualquier consola, después de un tiempo, la acumulación de comandos e impresiones anteriores se ve abarrotada y, a veces, es confusa cuando se vuelve a ejecutar el mismo comando varias veces. Me pregunto si, y cómo, limpiar la consola del intérprete de Python.

Escuché sobre hacer una llamada al sistema y llamar clsa Windows o clearLinux, pero esperaba que hubiera algo que pudiera ordenarle al intérprete que hiciera.

Nota: estoy ejecutando en Windows, por lo Ctrl+Lque no funciona.

Soviut
fuente
Solución de IPython aquí: stackoverflow.com/questions/6892191/…
onewhaleid el
Me sorprende que nadie lo haya mencionado. Pero cuando está utilizando Ipython shell puede hacer Ctrl + L incluso en Windows
user93

Respuestas:

443

Como mencionó, puede hacer una llamada al sistema:

Para ventanas

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

Para Linux, la lambda se convierte

>>> clear = lambda: os.system('clear')
Ryan Duffield
fuente
1
Esta respuesta está más cerca del "espíritu" de lo que estaba pidiendo, gracias.
Soviut
1
+1, buena respuesta. ¿Hay alguna manera de consumir el valor de retorno para que no se muestre? Me sale un '0' después de correr claro.
Technomalogical
15
Definirlo en una función regular en lugar de lambda no debería mostrar '0' ya que el valor de retorno será Ninguno.
Akbar ibrahim
46
¿Qué hay de malo en usar def? ¿Por qué usar a lambdacuando a defes más claro?
S.Lott
17
@Akbaribrahim como Ninguno no se imprimirá, intente esto:clear = lambda: os.system('cls') or None
enpenax
193

aquí algo práctico que es un poco más multiplataforma

import os

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

# now, to clear the screen
cls()
popcnt
fuente
Gran manera de hacer las cosas, combina esto con la sugerencia lambda anterior para guardar una fila de código, ¡muy útil! ¡Gracias! :)
Torxed
import os os.system('cls')
Do Nhu Vy
1
Término variable de entorno no establecida.
Jonathan
87

Bueno, aquí hay un truco rápido:

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

O para guardar algo de escritura, coloque este archivo en su ruta de búsqueda de Python:

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

wipe = Wipe()

Entonces puedes hacer esto desde el intérprete todo lo que quieras :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe
Tríptico
fuente
12
Jaja, eso es muy gracioso. No es exactamente lo que estaba buscando, pero buen intento.
Soviut
44
@Triptych: c = "\ n" * 100 útiles, +1 por ello. Un pequeño comentario que borra y lleva al fondo del shell, prefiero comenzar desde la parte superior del shell.
pythonbeginer
1
O, si su emulador de terminal interpreta ANSI, mejor hacerlo:"\x1B[H\x1B[J"
Alba Mendez
8
A pesar de risa de la gente, la impresión de una gran cantidad de saltos de línea es exactamente lo que los procesos externos cleary clshacer. Esta es la forma de hacerlo. (solo una impresión, o una función con la llamada de impresión, que no se asigna a una cadena "clara", por supuesto)
jsbueno
44
@jsbueno no, no lo es. Bueno, tal vez en Windows (aunque lo dudo, tiene API para borrar la consola). En todos los demás sistemas, clearemite una directiva que borra la pantalla. Sin destruir el búfer de desplazamiento hacia atrás. En mi sistema, que da salida a esta secuencia de control: \33[3J\33[H\33[2J. Es decir: [erase scrollback] [reset cursor position] [erase screen]. Se [erase scrollback]puede omitir usando clear -x.
espectras
28

Aunque esta es una pregunta anterior, pensé que contribuiría con un resumen de lo que creo que era la mejor de las otras respuestas y agregaría una arruga propia al sugerir que coloque estos comandos en un archivo y configure su PYTHONSTARTUP variable de entorno para señalarlo. Dado que estoy en Windows en este momento, está ligeramente sesgado de esa manera, pero podría inclinarse fácilmente en otra dirección.

Aquí hay algunos artículos que encontré que describen cómo establecer variables de entorno en Windows:
    cuándo usar sys.path.append y al modificar% PYTHONPATH% es suficiente
    Cómo administrar las variables de entorno en Windows XP
    Configurar el sistema y las variables de entorno del usuario
    Cómo usar el sistema global Variables de entorno en Windows

Por cierto, no ponga comillas alrededor de la ruta del archivo, incluso si tiene espacios en él.

De todos modos, aquí está mi opinión sobre el código para poner (o agregar a su script de inicio de Python existente):

# ==== 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 ====

Por cierto, también puedes usar el __repr__ truco de @ Triptych para cambiar exit()a just exit(y lo mismo para su alias quit):

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

quit = exit = exit()

Por último, de aquí otra cosa que cambia el intérprete principal de la pronta >>>a cwd + >>>:

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

import sys
sys.ps1 = Prompt()
del sys
del Prompt
Martineau
fuente
Esta es probablemente la mejor respuesta: una combinación de técnicas de otras respuestas. PYTHONSTARTUP + repr + os.system ('cls'). Muy agradable.
Tríptico
@Triptych: un efecto secundario interesante de usar __repr__y / o de __str__esta manera es que si escribe >>> vars()en la consola del intérprete, ejecutará todos los comandos así definidos. En mi sistema, por ejemplo, borró la pantalla y luego salió de la consola. Me tomó un tiempo para averiguar qué diablos estaba pasando ....
martineau
interesante. Veo que este problema también se aplica a locals()y globals(). Un decorador simple alrededor de estas funciones que elimina el nombre y lo reasigna después de la invocación de la función es una posible solución ...
Triptych
@Triptych: La idea del decorador no parece funcionar, al menos con mis propios intentos. Encontrar una alternativa viable está resultando sorprendentemente difícil.
Martineau
Tengo una solución candidata que simplemente cambia el resultado de las llamadas vars () globals () y locales () temporalmente: gist.github.com/4172781
Tríptico
28

Tiene varias formas de hacerlo en Windows:

1. Usando el atajo de teclado:

Press CTRL + L

2. Usando el método de invocación del sistema:

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

3. Usando la nueva línea de impresión 100 veces:

cls = lambda: print('\n'*100)
cls()
Vlad Bezden
fuente
55
Todas estas formas son bonitas ... naff. clssolo funcionará en Windows y dificultará que su programa sea multiplataforma, imprimir 100 newlineses solo ... ¿eww? Y un atajo de teclado no se usa en el programa.
Lucas
22

La forma más rápida y fácil sin duda es Ctrl+ L.

Esto es lo mismo para OS X en el terminal.

Alex K
fuente
3
Probé esta solución usando "L" mayúscula o minúscula con la tecla Ctrl en Windows 8.1. A mi no me funciona. Simplemente abro y cierro la ventana de shell para borrarlo.
Chris22
2
En OS X, Ctrl + L rellenará el terminal hasta que la pantalla esté clara. Todavía puede desplazarse hacia arriba para ver el historial. Use Cmd + K para borrar la pantalla y el historial de impresión. Una lista más completa de teclas de acceso rápido del terminal OS X
Andrew Franklin
2
Trabaja maravillosamente para mí en Ubuntu Desktop 16
Nam G VU
15

mi forma de hacerlo es escribir una función como esta:

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

luego llame clear()para borrar la pantalla. esto funciona en windows, osx, linux, bsd ... todos los sistemas operativos.

MartinUbuntu
fuente
Puede querer decir os.name in ('linux','osx'), y también podría querer agregar 'posix'también.
rsanden
@rsanden 'linux' y 'osx' cubren prácticamente todas las personas del sistema operativo que REALMENTE usan.
MartinUbuntu
Estoy ejecutando Ubuntu 15.04, y os.name == 'posix'en Python 2.7.9 y 3.4.3
rsanden
@rsanden agregó posix.
MartinUbuntu
9

Aquí hay un fragmento de versión multiplataforma (Windows / Linux / Mac / Probablemente otros que puede agregar en el if check) que hice combinando la información encontrada en esta pregunta:

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

La misma idea pero con una cucharada de azúcar sintáctica:

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

El limpiador es genial, lo bueno es que no tengo que escribir '()' alrededor. Aquí hay una ligera variación

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

El uso es bastante simple:

>>> cls = Cls()
>>> cls # this will clear console.
Amol
fuente
2
Yo lo nombraría class cls.
Martineau
1
Yo nombraría la instancia del class Clsser cls. cls = Cls()
Amol
Excepto que contamina el espacio de nombres inicial con dos cosas en lugar de una ... el doble.
martineau
@Amol He usado las tuyas y las de otros en mi solución . Puedes hacer class clsy luego cls=cls().
Alba Mendez
8

Esto es lo más simple que puede hacer y no requiere ninguna biblioteca adicional. Borrará la pantalla y volverá >>>a la esquina superior izquierda.

print("\033[H\033[J")
Denis Rasulev
fuente
Esto tiene la ventaja de que también funciona en Spyder.
Graham G
7

para el usuario mac dentro del tipo de consola python

import os
os.system('clear')

para ventanas

os.system('cls')
Yubaraj Poudel
fuente
5

Aquí está la solución definitiva que combina todas las demás respuestas . caracteristicas:

  1. Puede copiar y pegar el código en su shell o script.
  2. Puedes usarlo como quieras:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Puedes importarlo como un módulo:

    >>> from clear import clear
    >>> -clear
  4. Puedes llamarlo como un script:

    $ python clear.py
  5. Es verdaderamente multiplataforma ; si no puede reconocer a su sistema
    ( ce, nt, doso posix) va a caer de nuevo a la impresión de líneas en blanco.


Puede descargar el archivo [completo] aquí: https://gist.github.com/3130325
O si solo está buscando el código:

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
fuente
5

No estoy seguro de si el "shell" de Windows lo admite, pero en Linux:

print "\033[2J"

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

En mi opinión, llamar clscon oses una mala idea en general. Imagínese si logro cambiar los cls o el comando clear en su sistema, y ​​ejecuta su script como administrador o root.

Peter G. Marczis
fuente
Estoy de acuerdo en que cls no es ideal en este caso, y una secuencia de escape ANSI es mejor. En particular, usar os para invocar un nuevo proceso es una operación bastante costosa, en comparación con empujar unos pocos bytes a stdout.
silviot
5

Uso iTerm y la aplicación de terminal nativa para Mac OS.

Solo presiono ⌘ + k

Jorge E. Hernández
fuente
4

Usar inactivo. Tiene muchas funciones útiles. Ctrl+F6, por ejemplo, restablece la consola. Cerrar y abrir la consola son buenas maneras de limpiarla.

S.Lott
fuente
¿Cómo haces eso en inactivo? ¿Solo cerrar y volver a abrir?
Andrea Ambu
55
No, sin F6embargo , no restablece la consola inactiva CTRL+F6. Lamentablemente esto no borra la pantalla. D'oh! (Python Win32 Idle versiones 2.6.2, 2.7.1, 3.2).
ridgerunner
2

Estoy usando MINGW / BASH en Windows XP, SP3.

(pegue esto en .pythonstartup)
# Mi ctrl-l ya funcionaba, pero esto podría ayudar a alguien más
# deja un mensaje en la parte inferior de la ventana ...
import readline
readline.parse_and_bind ('\ Cl: clear-screen')

# Esto funciona en BASH porque también lo tengo en .inputrc, pero por alguna
# razón se cae cuando entro en Python
readline.parse_and_bind ('\ Cy: kill-whole-line')


No podía soportar escribir 'exit ()' más y estaba encantado con los trucos de martineau / Triptych:

Aunque lo modifiqué un poco (lo pegué en .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
fuente
2

El comando del sistema operativo clearen Linux y clsen Windows genera una "cadena mágica" que puede imprimir. Para obtener la cadena, ejecute el comando con popen y guárdelo en una variable para su uso posterior:

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

print clear

En mi máquina la cadena es '\x1b[H\x1b[2J'.

larsr
fuente
1
1) Esa cadena mágica es una secuencia ANSI . \x1b[Hsignifica "mover el cursor a la esquina superior izquierda", \x1b[2Jsignifica "borrar toda la pantalla". 2) En Windows, ANSI no se reconoce, por lo que probablemente no haya ninguna cadena mágica.
Alba Mendez
1
¡Frio! Además, para python3 print ('\ x1b [H \ x1b [2J', end = ''); puede ayudar a evitar la nueva línea al frente.
DenMark
La cadena mágica funcionó en la consola de Microsoft Windows 10 con Python 3.6 para mí. Me gustó la secuencia de la secuencia, no el uso de con abierto.
DevPlayer
2

Aquí hay dos buenas maneras de hacerlo:

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()
tendencia de uso
fuente
Si os.name no es ninguno de estos, ¿por qué no volver a imprimir líneas vacías?
Alba Mendez
Si es Jython, quiero que sepas que os.name = 'java'
iChux el
Se ve bien, ¿significa esto que el programa puede convertirse en multiplataforma?
Lucas
2

Si está en Mac, entonces un simple cmd + kdebería hacer el truco.

CoderChai
fuente
2

La forma más fácil es usar el módulo os

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

Esto debe ser multiplataforma, y ​​también utiliza el preferido en subprocess.calllugar de os.systemsegún los os.systemdocumentos . Debería funcionar 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
Bellota
fuente
1

¿Qué tal esto para un claro

- os.system('cls')

¡Eso es lo más corto posible!

Dennis Kean
fuente
sí, pero no multiplataforma y debe volver a escribirlo cada vez que quiera borrar la pantalla.
Alba Mendez
1

Soy nuevo en Python (muy, muy nuevo) y en uno de los libros que estoy leyendo para familiarizarme con el lenguaje que enseñan cómo crear esta pequeña función para limpiar la consola de la cartera de pedidos visible y los comandos e impresiones anteriores:

Abrir shell / Crear nuevo documento / Crear función de la siguiente manera:

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

Guárdelo dentro de la carpeta lib en su directorio de python (el mío es C: \ Python33 \ Lib) La próxima vez que necesite borrar su consola, simplemente llame a la función con:

clear()

Eso es. PD: puedes nombrar tu función como quieras. Iv ha visto personas usando "limpiador", "borrado" y variaciones.

Adriana
fuente
1

Estoy usando Spyder (Python 2.7) y para limpiar la consola del intérprete uso

%claro

eso obliga a la línea de comando a ir a la parte superior y no veré los comandos anteriores anteriores.

o hago clic en "opción" en el entorno de la Consola y selecciono "Reiniciar kernel" que elimina todo.

Youness
fuente
1

Solo ingresa

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X
Anónimo
fuente
1

Si no necesita hacerlo a través del código, simplemente presione CTRL + L

Steven Tautonico
fuente
Sí, esto funciona, pero qué pasaría si quisiera hacer un comando en su archivo de Python que borra la consola, no haría que el usuario escriba algo y luego le diga que lo borre ellos mismos. borrarías la consola a través del código.
madladzen
1

Arch Linux (probado en xfce4-terminalPython 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'")

... añadido a ~/.pythonrc

  • clear() borra la pantalla
  • wipe() borra todo el búfer terminal
Victoria Stuart
fuente
0

EDITAR: Acabo de leer "Windows", esto es para usuarios de Linux, lo siento.


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

Guárdelo como "whatyouwant.sh", chmod + x luego ejecute:

./whatyouwant.sh python

o algo diferente a python (inactivo, lo que sea). Esto le preguntará si realmente desea salir, de lo contrario, volverá a ejecutar python (o el comando que le dio como parámetro).

Esto borrará todo, la pantalla y todas las variables / objeto / cualquier cosa que haya creado / importado en Python.

En python, simplemente escriba exit () cuando desee salir.

Andrea Ambu
fuente
0

De acuerdo, esta es una respuesta mucho menos técnica, pero estoy usando el complemento de Python para Notepad ++ y resulta que puedes borrar la consola manualmente haciendo clic derecho sobre ella y haciendo clic en "borrar". Espero que esto ayude a alguien por ahí!

invitado12345
fuente