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

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

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

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


当前回答

下面是一个跨平台(Windows / Linux / Mac /可能其他你可以添加在if检查)版本片段,我结合了这个问题中发现的信息:

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

同样的想法,但有一勺语法糖:

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

其他回答

完美的cls,也兼容Python2(在.pythonrc文件中):

from __future__ import print_function
cls = lambda: print("\033c", end='')

并且可以通过如下方式从终端调用:

cls()

或直接:

print("\033c", end='')

\033[H\033] J只清除可见屏幕,与Ubuntu 18.10之前的清除命令完全相同。它不清除滚动缓冲区。向上滚动将显示历史。

为了模拟这种行为,插入一些终端行,然后按Ctrl+L并插入更多。执行打印("\033[H\033[J", end="")后,只会删除按"Ctrl + L"后插入的屏幕行。

\033c清除一切。

\x1bc可能不会给出与\033c相同的结果,因为十六进制转义没有明确的长度限制。

下面是一个跨平台(Windows / Linux / Mac /可能其他你可以添加在if检查)版本片段,我结合了这个问题中发现的信息:

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

同样的想法,但有一勺语法糖:

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

我的方法是这样写一个函数:

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

然后调用clear()清除屏幕。 这适用于windows, osx, linux, bsd…所有的操作系统。

这里有一个最终的解决方案,它融合了所有其他的答案。特点:

您可以将代码复制粘贴到shell或脚本中。 你可以随心所欲地使用它: > > > clear () > > >明确 >>> clear # <-但这只适用于shell 你可以把它作为一个模块导入: >>> from clear import clear > > >明确 你可以调用它作为一个脚本: $ python clear.py 它是真正的多平台游戏;如果它不能识别你的系统 (ce, nt, DOS或posix),它将回落到打印空白行。


你可以在这里下载[完整]文件:https://gist.github.com/3130325 或者如果你只是在寻找代码:

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

虽然这是一个较老的问题,但我认为我应该贡献一些东西,总结我认为最好的其他答案,并建议您将这些命令放入一个文件中,并设置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