像大多数Python开发人员一样,我通常打开一个控制台窗口,运行Python解释器来测试命令、dir()之类的东西、help()之类的东西,等等。

像任何控制台一样,在一段时间后,过去命令和打印的可见积压会变得混乱,并且在多次重新运行相同的命令时有时会令人困惑。我想知道是否以及如何清除Python解释器控制台。

我听说过做一个系统调用,或者在Windows上调用cls,或者在Linux上清除,但我希望有一些我可以命令解释器本身做的事情。

注意:我在Windows上运行,所以Ctrl+L不起作用。


当前回答

使用闲置。它有许多方便的功能。例如,Ctrl+F6重置控制台。关闭和打开控制台是清除它的好方法。

其他回答

好吧,这里有一个小窍门:

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

或者为了节省一些输入,把这个文件放在你的python搜索路径中:

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

wipe = Wipe()

然后你可以从解释器做这一切你喜欢的:)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe

虽然这是一个较老的问题,但我认为我应该贡献一些东西,总结我认为最好的其他答案,并建议您将这些命令放入一个文件中,并设置PYTHONSTARTUP环境变量指向它。因为我现在用的是Windows系统,所以它有点偏向这个方向,但也很容易偏向其他方向。

下面是我找到的一些描述如何在Windows上设置环境变量的文章: 什么时候使用sys.path.append,什么时候修改%PYTHONPATH%就足够了 如何管理Windows XP环境变量 配置系统和用户环境变量 Windows下如何使用全局系统环境变量

顺便说一句,即使文件中有空格,也不要在文件的路径周围加上引号。

不管怎样,这里是我对放入(或添加到你现有的)Python启动脚本的代码的看法:

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

顺便说一句,你也可以使用@Triptych的__repr__技巧将exit()更改为just exit(其别名quit也是如此):

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

quit = exit = exit()

最后,这里还有一些东西将主要解释器提示符从>>>更改为cwd+>>>:

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

import sys
sys.ps1 = Prompt()
del sys
del Prompt

正如你提到的,你可以做一个系统调用:

Windows:

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

对于Linux,它将是:

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

这是您可以做的最简单的事情,它不需要任何额外的库。它清除屏幕并将>>>返回到左上角。

print("\033[H\033[J", end="")

更新1:

既然这个答案得到了一些关注,你可能想知道它是如何工作的。上面的命令输出ANSI转义码:

\033代表ESC (ANSI值27)。 \033[是一个特殊的转义序列,称为控制序列 介绍人(CSI)。 \033[H命令将光标移动到屏幕的左上角。 \033[J清除屏幕从光标到的结束 屏幕上。

可选参数end=""避免在执行这些命令后打印换行符,因此>>>将保持在最上面一行。

更新2:

你可能想用一个额外的参数来扩展上面的命令- x(在J之前):

print("\033[H\033[xJ", end="")

如果x为1,它将从光标清除到屏幕开始。 如果x是2,它将清除整个屏幕并移动光标到 左上角。 如果x = 3,它将全部清空 筛选并删除保存在滚动缓冲区中的所有行。

因此,这个命令将清除所有内容,包括buffer:

print("\033[H\033[3J", end="")

命令行:

要清除shell(控制台/终端)中的屏幕,您可以使用相同的命令。要清除整个屏幕并删除scrollback缓冲区中保存的所有行,在J前面加3:

printf "\033[H\033[3J"

或者创建一个别名:

alias cls='printf "\033[H\033[3J"'

如果你在.inputrc中使用vim键绑定:

set editing-mode vi

它是:

ESC Ctrl-L