Écran clair dans la coque

90

Juste une petite question:
comment effacer l'écran en shell? J'ai vu des moyens comme:

import os
os.system('cls')

Cela ouvre simplement la fenêtre cmd, efface l'écran et se ferme mais je veux que la fenêtre shell soit effacée
(PS: je ne sais pas que cela aide, mais j'utilise la version 3.3.2 de Python)
Merci :)

Josh
la source
duplication possible de Comment effacer la console d'interprétation Python?
Cees Timmerman

Réponses:

57

Pour macOS / OS X, vous pouvez utiliser le module de sous-processus et appeler 'cls' depuis le shell:

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

Pour éviter que «0» ne s'affiche en haut de la fenêtre, remplacez la deuxième ligne par:

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

Pour Linux, vous devez remplacer la clscommande parclear

tmp = sp.call('clear', shell=True)
GalHai
la source
3
J'utilise Mac OS X, et j'ai essayé ceci import subprocess as sp sp.call('clear',shell=True)qui fonctionne, sauf qu'il y a un 0en haut de la fenêtre du terminal.
Daniel Dropik
0 est la valeur de retour de l'appel de commande 'cls' depuis le shell. J'ai modifié la réponse pour m'en débarrasser également, en stockant simplement cette valeur dans une variable.
GalHai
9
Essayez cecictrl+L
Sai Ram
Cela fonctionne sur la ligne de commande. La question était de savoir comment le faire en Python.
Edward Falk
Merci pour la solution, il me manquait shell = True. pour éviter que le 0 n'apparaisse, vous pouvez également ajouter un point-virgule à la fin de l'instruction. sp.call('cls', shell=True);
Waylon Walker
84

Et le raccourci CTRL+ L?

Cela fonctionne pour tous les shells, par exemple Python, Bash, MySQL, MATLAB, etc.

Shafiq
la source
6
Malheureusement, ne fonctionne pas sur Windows, y compris le nouveau cmd dans Windows10
9a3eedi
Lorsque vous utilisez un sous-processus pour l'automatisation, cette approche ne fonctionne pas.
mountainLion
64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X
Rajan Mandanka
la source
Aussi, os.system('clear')pour les terminaux Mac OS X (confirmé pour fonctionner avec le shell par défaut bash, et aussi pour csh).
jvriesem
Vous pouvez également définir une fonction pour exécuter ceci, comme: def cls (): os.system ('cls') (appuyez deux fois sur Entrée). Ensuite, vous pouvez simplement taper cls () pour effacer l'écran.
La question était de savoir comment faire cela dans le shell.
Kyle Delaney
1
@KyleDelaney bien qu'inefficace, il fonctionne dans le shell. De plus, beaucoup de gens ont trouvé cela utile parce que c'est ce qu'ils recherchaient.
Gaspa79
12

Le genre de chose que vous recherchez se trouve dans le module curses.

c'est à dire

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

Note importante

La chose importante à retenir est avant toute sortie, vous devez réinitialiser le terminal en mode normal, cela peut être fait avec les lignes suivantes:

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

Sinon, vous obtiendrez toutes sortes de comportements étranges. Pour s'assurer que cela est toujours fait, je suggérerais d'utiliser le module atexit, quelque chose comme:

import atexit

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

Fera probablement très bien.

Steve Barnes
la source
Peux-tu être plus précis?
josh
1
J'utilise Mac OS X 10.7.5 et iTerm 2 pour mon terminal. En utilisant Python2.7, les stdscr = curses.initscr()travaux pour effacer l'écran, et le stdscr.clear()ne fait rien. En utilisant Python3.4, le efface stdscr = curses.initscr()l'écran, mais enlève la capacité du terminal à traiter les nouvelles lignes. Lorsque j'appuie sur Entrée à plusieurs reprises, cela donne ce qui suit: >>> >>> >>> >>> et ainsi de suite. Je peux toujours taper des commandes, mais elles n'apparaissent pas. En outre, ce comportement persiste même lorsque je exit()Python. ÉVITEZ L'UTILISATION!
jvriesem
@jvriesem le module curses est utilisé depuis longtemps et a été utilisé par beaucoup de gens - je vous suggère de voir si vous pouvez reproduire le comportement en un court, (20 lignes environ), exemple et soit post comme question de débordement de pile ou sur la liste de diffusion des développeurs.
Steve Barnes
Bonne idée - c'est une meilleure réponse que mon "AVOID USE!" déclaration. Les deux premières lignes de cette réponse étaient les deux lignes qui reproduisent le problème pour moi. Savez-vous s'il y a une raison pour laquelle le cursesmodule peut avoir des problèmes de compatibilité (Windows vs Mac vs Linux)? Je peux confirmer que ce problème se produit au moins sur deux terminaux Mac différents. Le comportement persiste dans BASH mais pas dans CSH. Hmm .... Pensez-vous que je devrais contacter le développeur de malédictions, le développeur du shell, ou simplement demander à la communauté SO? Merci encore!
jvriesem
@jvriesem - J'ai mis à jour ma réponse pour inclure comment réinitialiser votre terminal en mode standard une fois que vous avez terminé, y compris à toute sortie.
Steve Barnes
12

Voici quelques options que vous pouvez utiliser sous Windows

Première option:

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

>>> cls()

Deuxième option:

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

>>> cls()

Troisième option si vous êtes dans la fenêtre Python REPL:

Ctrl+L
Vlad Bezden
la source
9

En plus d'être une excellente bibliothèque CLI, clickfournit également une clear()fonction indépendante de la plate-forme :

import click
click.clear()
Martin Valgur
la source
7

Cette fonction fonctionne dans n'importe quel système d'exploitation (Unix, Linux, macOS et Windows)
Python 2 et 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

Dans Windows, la commande est cls, dans les systèmes de type Unix, la commande est clear.
platform.system()renvoie le nom de la plateforme. Ex. 'Darwin'pour macOS.
subprocess.call()effectue un appel système. Ex.subprocess.call(['ls','-l'])

ePi272314
la source
6

Un moyen plus simple d'effacer un écran en python est d'utiliser Ctrl+ Lbien que cela fonctionne pour le shell ainsi que pour d'autres programmes.

BioinfoNerd
la source
4

Si vous utilisez un terminal Linux pour accéder à python, cntrl + l est la meilleure solution pour effacer l'écran

HMS
la source
4

J'utilise une classe qui utilise simplement l'une des méthodes ci-dessus dans les coulisses ... J'ai remarqué que cela fonctionne sur Windows et Linux ... J'aime l'utiliser car il est plus facile de taper clear () au lieu de system ('clear' ) ou os.system ('clear')

pip3 install clear-screen

from clear_screen import clear

puis lorsque vous souhaitez effacer le shell:

clear()

la source
3

en utilisant Windows 10 et pyhton3.5, j'ai testé de nombreux codes et rien ne m'a aidé plus que cela:

Définissez d'abord une fonction simple, cette fonction imprimera 50 nouvelles lignes; (le nombre 50 dépendra du nombre de lignes que vous pouvez voir sur votre écran, vous pouvez donc changer ce nombre)

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

puis appelez-le autant de fois que vous le souhaitez ou que vous en avez besoin

cls()
sami.almasagedi
la source
Aucune des idées de commande prêtes à l'emploi n'a fonctionné pour moi. créer ceci, ma propre fonction a bien sûr fait.
DashingQuark
2

Command+K fonctionne très bien dans OSX pour effacer l'écran.

Shift+Command+K pour effacer uniquement le tampon de défilement.

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

Le sous-processus vous permet d'appeler "cls" pour Shell.

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

C'est aussi simple que je peux le faire. J'espère que ça marche pour toi!

Seth Connell
la source
1
  1. vous pouvez utiliser Windows ou Linux OS

    import os
    os.system('cls')
    os.system('clear')
    
  2. vous pouvez utiliser le module de sous-processus

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

os.system('cls')fonctionne très bien lorsque je les ouvre. Il s'ouvre dans le style cmd.

Phich
la source
1

Plutôt que d'importer tous les malédictions ou de décortiquer juste pour obtenir un caractère de contrôle, vous pouvez simplement utiliser (sous Linux / macOS):

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

(Source: terminal clair en Python )

CharlesL
la source
0

Voici comment créer le vôtre clsouclear commande qui fonctionnera sans appeler explicitement une fonction!

Nous profiterons du fait que la console python appelle repr()pour afficher des objets à l'écran. Ceci est particulièrement utile si vous avez votre propre shell python personnalisé (avec l' -ioption par exemple) et que vous avez un script de pré-chargement pour celui-ci. Voici ce dont vous avez besoin:

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

cls = ScreenCleaner()

Utilisez clearplutôt que clssi vous êtes sous Linux (à la fois dans la oscommande et dans le nom de la variable)!

Maintenant, si vous écrivez simplement clsou cleardans la console, cela l'effacera! Pas même cls()ou clear()- juste la variable brute. C'est parce que python appellera repr(cls)pour l'imprimer, ce qui déclenchera à son tour notre __repr__fonction.

Testons-le:

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

Et l'écran est clair!

Pour clarifier - le code ci-dessus doit soit être importé dans la console comme ceci

from somefile import cls

Ou pré-chargez directement avec quelque chose comme:

python -i my_pre_loaded_classes.py
Ofer Sadan
la source
0

C'est la meilleure façon:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()
Fahimbd_14
la source
3
Je ne vois pas vraiment comment votre réponse s’améliore par rapport aux réponses déjà données les années précédentes.
David Buck le
Ceux qui en ont besoin verront. Je n'ai pas besoin d'amélioration, mon frère. Merci mec.
Fahimbd_14
2
il ne parlait pas d'améliorer votre réponse. Il a déclaré que votre réponse n'était pas utile, car quelqu'un d'autre a déjà donné la même chose.
OmikronWeapon
0

Pour Python IDLE 3.8.1, vous pouvez redémarrer le Shell

CTRL + F6

Dans le menu Cliquez sur le menu Shell. Cliquez ensuite sur l'option Redémarrer Shell.

Peter Cockram
la source