Pantalla transparente en cáscara

90

Solo una pregunta rápida:
¿Cómo borras la pantalla en shell? He visto formas como:

import os
os.system('cls')

Esto solo abre el cmd de Windows, borra la pantalla y se cierra, pero quiero que se borre la ventana del shell
(PD: no sé que esto ayude, pero estoy usando la versión 3.3.2 de Python)
Gracias :)

Josh
fuente
posible duplicado de ¿Cómo borrar la consola del intérprete de Python?
Cees Timmerman

Respuestas:

57

Para macOS / OS X, puede usar el módulo de subproceso y llamar a 'cls' desde el shell:

import subprocess as sp
sp.call('cls', shell=True)

Para evitar que se muestre '0' en la parte superior de la ventana, reemplace la segunda línea con:

tmp = sp.call('cls', shell=True)

Para Linux, debe reemplazar el clscomando conclear

tmp = sp.call('clear', shell=True)
GalHai
fuente
3
Estoy usando Mac OS X y probé esto import subprocess as sp sp.call('clear',shell=True)que funciona, excepto que hay un 0en la parte superior de la ventana del terminal.
Daniel Dropik
0 es el valor de retorno de la llamada de comando 'cls' desde el shell. Edité la respuesta para deshacerme de eso también, simplemente almacenando ese valor en una variable.
GalHai
9
Prueba estoctrl+L
Sai Ram
Eso funciona en la línea de comandos. La pregunta era cómo hacerlo en Python.
Edward Falk
Gracias por la solución, me faltaba shell = True. para evitar que aparezca el 0, también puede agregar un punto y coma al final de la declaración. sp.call('cls', shell=True);
Waylon Walker
84

¿Qué pasa con el atajo CTRL+ L?

Funciona para todos los shells, por ejemplo, Python, Bash, MySQL, MATLAB, etc.

Shafiq
fuente
6
Desafortunadamente no funciona en Windows, incluido el nuevo cmd en Windows10
9a3eedi
Cuando se utiliza un subproceso para la automatización, este enfoque no funciona.
mountainLion
64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X
Rajan Mandanka
fuente
Además, os.system('clear')para terminales Mac OS X (confirmado que funciona con el shell predeterminado bash, y también para csh).
jvriesem
También puede definir una función para ejecutar esto, como: def cls (): os.system ('cls') (presione enter dos veces). Luego, puede escribir cls () para borrar la pantalla.
La pregunta era cómo hacer esto en el caparazón.
Kyle Delaney
1
@KyleDelaney, aunque ineficaz, funciona en el shell. Además, muchas personas encontraron esto útil porque eso es lo que estaban buscando.
Gaspa79
12

El tipo de cosas que estás buscando se encuentra en el módulo de curses.

es decir

import curses  # Get the module
stdscr = curses.initscr()  # initialise it
stdscr.clear()  # Clear the screen

Nota IMPORTANTE

Lo importante a recordar es que antes de cualquier salida, es necesario restablecer el terminal a un modo normal, esto se puede hacer con las siguientes líneas:

curses.nocbreak()
stdscr.keypad(0)
curses.echo()
curses.endwin()

Si no lo hace, obtendrá todo tipo de comportamiento extraño. Para asegurar que esto siempre se haga, sugeriría usar el módulo atexit, algo como:

import atexit

@atexit.register
def goodbye():
    """ Reset terminal from curses mode on exit """
    curses.nocbreak()
    if stdscr:
        stdscr.keypad(0)
    curses.echo()
    curses.endwin()

Probablemente le irá bien.

Steve Barnes
fuente
¿Puedes ser mas específico?
Josh
1
Estoy ejecutando Mac OS X 10.7.5 e iTerm 2 para mi terminal. Con Python2.7, stdscr = curses.initscr()funciona para limpiar la pantalla y stdscr.clear()no hace nada. Al usar Python3.4, stdscr = curses.initscr()borra la pantalla, pero elimina la capacidad del terminal para procesar nuevas líneas. Cuando presiono enter repetidamente, aparece lo siguiente: >>> >>> >>> >>> y así sucesivamente. Todavía puedo escribir comandos, pero no aparecen. Además, este comportamiento persiste incluso cuando utilizo exit()Python. ¡EVITE SU USO!
jvriesem
@jvriesem, el módulo de curses ha estado en uso durante mucho tiempo y ha sido utilizado por mucha gente. Le sugiero que vea si puede replicar el comportamiento en un ejemplo corto (20 líneas más o menos) y en una publicación. como una pregunta de desbordamiento de pila o en la lista de correo del desarrollador.
Steve Barnes
Buena idea, es una mejor respuesta que mi "¡EVITAR EL USO!" declaración. Las dos primeras líneas de esta respuesta fueron las dos líneas que reproducen el problema para mí. ¿Sabe si hay alguna razón por la que el cursesmódulo pueda tener problemas de compatibilidad (Windows, Mac, Linux)? Puedo confirmar que este problema ocurre en dos terminales Mac diferentes, al menos. El comportamiento persiste en BASH pero no en CSH. Hmm ... ¿Crees que debería contactar al desarrollador de curses, al desarrollador de shell, o simplemente preguntarle a la comunidad SO? ¡Gracias de nuevo!
jvriesem
@jvriesem: he actualizado mi respuesta para incluir cómo restablecer su terminal al modo estándar una vez que haya terminado, incluso en cualquier salida.
Steve Barnes
12

Aquí hay algunas opciones que puede usar en Windows

Primera opción:

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

>>> cls()

Segunda opción:

cls = lambda: print('\n' * 100)

>>> cls()

Tercera opción si está en la ventana REPL de Python:

Ctrl+L
Vlad Bezden
fuente
9

Además de ser una gran biblioteca CLI versátil, clicktambién proporciona una clear()función independiente de la plataforma :

import click
click.clear()
Martín Valgur
fuente
7

Esta función funciona en cualquier sistema operativo (Unix, Linux, macOS y Windows)
Python 2 y Python 3

import platform    # For getting the operating system name
import subprocess  # For executing a shell command

def clear_screen():
    """
    Clears the terminal screen.
    """

    # Clear command as function of OS
    command = "cls" if platform.system().lower()=="windows" else "clear"

    # Action
    return subprocess.call(command) == 0

En Windows, el comando es cls, en sistemas tipo Unix, el comando es clear.
platform.system()devuelve el nombre de la plataforma. Ex. 'Darwin'para macOS.
subprocess.call()realiza una llamada al sistema. Ex.subprocess.call(['ls','-l'])

ePi272314
fuente
6

Una forma más fácil de borrar una pantalla mientras está en Python es usar Ctrl+ Launque funciona tanto para el shell como para otros programas.

BioinfoNerd
fuente
4

Si está utilizando la terminal de Linux para acceder a Python, entonces cntrl + l es la mejor solución para borrar la pantalla

HMS
fuente
4

Estoy usando una clase que solo usa uno de los métodos anteriores entre bastidores ... noté que funciona en Windows y Linux ... aunque me gusta usarlo porque es más fácil escribir clear () en lugar de system ('clear' ) o os.system ('borrar')

pip3 install clear-screen

from clear_screen import clear

y luego, cuando quieras borrar el caparazón:

clear()

fuente
3

usando Windows 10 y Pyhton3.5 he probado muchos códigos y nada me ayudó más que esto:

Primero defina una función simple, esta función imprimirá 50 nuevas líneas; (el número 50 dependerá de cuántas líneas pueda ver en su pantalla, por lo que puede cambiar este número)

def cls(): print ("\n" * 50)

entonces llámalo tantas veces como quieras o necesites

cls()
sami.almasagedi
fuente
Ninguna de las ideas de comando ya construidas funcionó para mí. creando esto, mi propia función, por supuesto, lo hizo.
DashingQuark
2

Command+K funciona bien en OSX para borrar la pantalla.

Shift+Command+K para borrar solo el búfer de retroceso.

Ayer
fuente
1
import curses
stdscr = curses.initscr()
stdscr.clear()
sl1ng5h0t
fuente
1

El subproceso le permite llamar a "cls" para Shell.

import subprocess
cls = subprocess.call('cls',shell=True)

Eso es tan simple como puedo hacerlo. ¡Espero que funcione para ti!

Seth Connell
fuente
1
  1. puedes usar Windows o Linux OS

    import os
    os.system('cls')
    os.system('clear')
    
  2. puedes usar el módulo de subproceso

    import subprocess as sp
    x=sp.call('cls',shell=True)
    
Rohit Parghi
fuente
1

os.system('cls')funciona bien cuando los abro. Se abre en estilo cmd.

Phich
fuente
1

En lugar de importar todas las maldiciones o desembolsar solo para obtener un carácter de control, simplemente puede usar (en Linux / macOS):

print(chr(27) + "[2J")

(Fuente: Borrar terminal en Python )

CharlesL
fuente
0

Aquí le mostramos cómo hacer su propio clsoclear de comando que el trabajo sin llamar explícitamente cualquier función!

Aprovecharemos el hecho de que la consola de Python llama repr()para mostrar objetos en la pantalla. Esto es especialmente útil si tiene su propio shell de python personalizado (con la -iopción, por ejemplo) y tiene un script de precarga para él. Esto es lo que necesitas:

import os
class ScreenCleaner:
    def __repr__(self):
        os.system('cls')  # This actually clears the screen
        return ''  # Because that's what repr() likes

cls = ScreenCleaner()

¡Úselo en clearlugar de clssi está en Linux (tanto en el oscomando como en el nombre de la variable)!

Ahora, si solo escribe clso clearen la consola, ¡se borrará! Ni siquiera cls()o clear(), solo la variable bruta. Esto se debe a que Python llamará repr(cls)para imprimirlo, lo que a su vez activará nuestro__repr__ función.

Probémoslo:

>>> df;sag
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'df' is not defined
>>> sglknas
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sglknas' is not defined
>>> lksnldn
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'lksnldn' is not defined
>>> cls

¡Y la pantalla está clara!

Para aclarar, el código anterior debe importarse en la consola de esta manera

from somefile import cls

O precargue directamente con algo como:

python -i my_pre_loaded_classes.py
Ofer Sadan
fuente
0

Esa es la mejor forma:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()
Fahimbd_14
fuente
3
Realmente no veo cómo su respuesta mejora en ninguna de las respuestas que ya se dieron en años anteriores.
David Buck
Aquellos que lo necesiten lo verán. No tengo necesidad de mejorar hermano. gracias hermano.
Fahimbd_14
2
no estaba hablando de mejorar tu respuesta. Dijo que tu respuesta no es útil, porque alguien más ya ha dado la misma.
OmikronWeapon
0

Para Python IDLE 3.8.1 puede reiniciar el Shell

CTRL + F6

En el menú Haga clic en el menú Shell. Luego haga clic en la opción Reiniciar Shell.

Peter Cockram
fuente