外壳清晰


91

只是一个简单的问题:
如何清除外壳中的屏幕?我见过类似的方式:

import os
os.system('cls')

这只是打开Windows cmd,清除屏幕并关闭,但是我希望清除shell窗口
(PS:我不知道这有什么帮助,但是我使用的是Python 3.3.2版)
谢谢:)


Answers:


57

对于macOS / OS X,您可以使用子进程模块并从外壳程序中调用“ cls”:

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

为了防止在窗口顶部显示“ 0”,请用以下内容替换第二行:

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

对于Linux,您必须将cls命令替换为clear

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

3
我使用的是Mac OS X,但我尝试了该import subprocess as sp sp.call('clear',shell=True)方法,但0终端窗口顶部没有。
Daniel Dropik 2014年

从shell调用“ cls”命令的返回值是0。我通过简单地将值存储在变量中来编辑答案以消除该问题。
GalHai 2014年

9
试试这个ctrl+L
西拉姆

在命令行上有效。问题是如何在Python中做到这一点。
爱德华·福尔克

感谢您的解决方案,我错过了shell = True。为了防止显示0,您还可以在语句末尾添加分号。 sp.call('cls', shell=True);
Waylon Walker

86

快捷键CTRL+L呢?

它适用于所有shell,例如Python,Bash,MySQL,MATLAB等。


5
不幸的是,不适用于Windows,包括Windows10中的新cmd
9a3eedi,

64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X

另外,os.system('clear')对于Mac OS X终端机(已确认可使用默认外壳程序,bash也适用于csh)。
jvriesem 2014年

您还可以定义一个函数来运行它,例如:def cls():os.system('cls')(两次按回车键)。然后,您只需键入cls()即可清除屏幕。

问题是关于如何在外壳中执行此操作。
凯尔·德莱尼

1
@KyleDelaney虽然效率低下,但可以在shell中运行。也有许多人认为这很有用,因为这就是他们想要的。
加斯帕79 '18

12

您正在寻找的东西可以在curses模块中找到。

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

重要的提示

要记住的重要一点是,在退出之前,您需要将终端重置为正常模式,这可以通过以下几行完成:

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

如果不这样做,您会得到各种各样的奇怪行为。为了确保始终做到这一点,我建议使用atexit模块,例如:

import atexit

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

可能会做得很好。


你可以说得更详细点吗?
2013年

1
我的终端运行的是Mac OS X 10.7.5和iTerm 2。使用Python2.7,stdscr = curses.initscr()可以清除屏幕,stdscr.clear()但无济于事。使用Python3.4,stdscr = curses.initscr()可以清除屏幕,但剥夺了终端处理换行符的能力。当我反复按Enter键时,它显示以下内容:>>> >>> >>> >>> 依此类推。我仍然可以键入命令,但它们不会显示。同样,即使我使用exit()Python ,此行为也会持续存在。避免使用!
jvriesem 2014年

@jvriesem curses模块已经使用了很长时间了,并且已经被很多人使用-我建议您看看是否可以在简短的示例(约20行)中复制行为,然后在作为堆栈溢出问题或在开发人员邮件列表中。
史蒂夫·巴恩斯

好主意-比我的“避免使用!”更好的答复 声明。此答案的前两行是为我复制问题的两行。您是否知道该curses模块是否有兼容性问题(Windows,Mac,Linux)?我可以确认至少在两个不同的Mac终端上会发生此问题。该行为在BASH中持续存在,但在CSH中不存在。嗯....您认为我应该联系curses开发人员,shell开发人员,还是只问SO社区?再次感谢!
jvriesem 2014年

@jvriesem-我更新了答案,以包括一旦完成(包括退出)如何将终端重置为标准模式。
史蒂夫·巴恩斯

12

这是您可以在Windows上使用的一些选项

第一种选择:

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

>>> cls()

第二种选择:

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

>>> cls()

第三种选择,如果您在Python REPL窗口中:

Ctrl+L


7

此功能可在任何操作系统(Unix,Linux,macOS和Windows)
Python 2和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

在Windows中,命令为cls;在类似Unix的系统中,命令为clear
platform.system()返回平台名称。例如 'Darwin'对于macOS。
subprocess.call()执行系统调用。例如subprocess.call(['ls','-l'])


5

在python中清除屏幕的一种更简单的方法是使用Ctrl+,L尽管它适用于Shell和其他程序。


4

如果您正在使用Linux终端访问python,则cntrl + l是清除屏幕的最佳解决方案


4

我正在使用只在幕后使用上述方法之一的类...我注意到它可以在Windows和Linux上运行...我喜欢使用它,因为键入clear()而不是system('clear' )或os.system('clear')

pip3 install clear-screen

from clear_screen import clear

然后当您想清除外壳程序时:

clear()

3

使用Windows 10pyhton3.5,我已经测试了许多代码,没有什么比这更多的帮助了我:

首先定义一个简单的函数,此功能将打印50个换行符;(数字50将取决于您在屏幕上可以看到多少行,因此您可以更改此数字)

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

然后只要您想要或需要多次调用它

cls()

没有现成的命令构想对我有用。创建这个,我自己的功能当然做到了。
DashingQuark

2

Command+K 在OSX中可以正常工作以清除屏幕。

Shift+Command+K 仅清除回滚缓冲区。



1

子进程允许您为Shell调用“ cls”。

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

这就是我所能做到的。希望对你有帮助!



1

os.system('cls')打开它们时效果很好。它以cmd样式打开。


1

您可以简单地使用(在Linux / macOS上),而不是导入所有的curses或掏空只是为了获得一个控制角色而已:

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

(来源:Python中的Clear终端


0

下面是如何使你自己clsclear命令,将工作没有显式调用任何功能!

我们将利用python控制台调用repr()在屏幕上显示对象这一事实。如果您有自己的自定义python shell(-i例如带有该选项),并且具有预加载脚本,则此功能特别有用。这是您需要的:

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

cls = ScreenCleaner()

如果您使用的是Linux,请使用clear代替cls(在os命令和变量名中都使用)!

现在,如果您只是编写文字clsclear在控制台中-它将清除它!甚至没有cls()或者clear()-只是原始的变量。这是因为python将调用repr(cls)以将其打印出来,从而触发我们的__repr__函数。

让我们测试一下:

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

屏幕清晰!

为了澄清-上面的代码需要像这样在控制台中导入

from somefile import cls

或直接通过以下方式预加载:

python -i my_pre_loaded_classes.py

0

那是最好的方法:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()

3
我真的看不出您的答案在前几年已经给出的答案中有何改进。
David Buck

那些需要它的人将会看到。我不需要改善兄弟。多谢兄弟。
Fahimbd_14

2
他不是在谈论改善您的答案。他说您的答案没有用,因为其他人已经给出了相同的答案。
OmikronWeapon

0

对于Python IDLE 3.8.1,您可以重新启动Shell

CTRL + F6

在菜单上单击外壳程序菜单。然后单击“重新启动外壳程序”选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.