如何清除解释器控制台?


325

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

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

我听说过要进行系统调用,然后cls在Windows或clearLinux 上进行调用,但是我希望可以命令解释器自己执行一些操作。

注意:我在Windows上运行,因此Ctrl+L无法正常工作。



我很惊讶没有人提到它。但是,当您使用Ipython shell时,即使在Windows中也可以执行Ctrl + L
user93 '18

Answers:


442

如前所述,您可以进行系统调用:

对于Windows

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

对于Linux,lambda变为

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

1
这个答案最接近我所要求的“精神”,谢谢。
苏联

1
+1,不错的答案。有没有办法使用返回值以使其不显示?运行清除后,我得到一个“ 0”。
technomalogical

15
在常规函数中定义它而不是lambda不应显示为“ 0”,因为返回值将为None。
Akbar ibrahim

46
使用有什么问题def?为什么lambda在a def更清晰的情况下使用a ?
S.Lott

17
@Akbaribrahim,因为将不会打印无,请尝试以下操作:clear = lambda: os.system('cls') or None
enpenax 2013年

193

这里有一些方便的东西,它是跨平台的

import os

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

# now, to clear the screen
cls()

解决问题的好方法,将其与上面的lambda建议结合起来,可以保存一行代码,非常方便!谢谢!:)
2012年

import os os.system('cls')
做Nhu Vy

1
TERM环境变量未设置。
乔纳森

87

好吧,这是一个快速的技巧:

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

12
哈哈,这很有趣。并不是我要找的东西,但是很好的尝试。
苏联2009年

4
@Triptych:c =“ \ n” * 100有用,为此+1。它清除了一个小注释,并显示在外壳底部,我更喜欢从外壳顶部开始。
pythonbeginer 2011年

1
或者,如果您的终端仿真器解释ANSI,则最好执行以下操作:"\x1B[H\x1B[J"
Alba Mendez

8
尽管有人在笑,但印刷很多换行符正是外部过程clearcls所做的事情。这这样做的方法。(当然只是打印或带有打印调用的函数,不辅助使用“清晰”字符串)
jsbueno

4
@jsbueno不,不是。好吧,也许在Windows上(尽管我对此表示怀疑,但它具有清除控制台的API)。在所有其他系统上,clear输出清除屏幕的指令。不会浪费回滚缓冲区。在我的系统上,它输出以下控制序列:\33[3J\33[H\33[2J。即:[erase scrollback] [reset cursor position] [erase screen]。的[erase scrollback]可使用被省略clear -x
光谱

28

尽管这是一个比较老的问题,但我认为我会提供一些建议,总结我认为是其他最佳答案的建议,并建议您将这些命令放入文件并设置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

这可能是最好的答案-结合其他答案的技术。PYTHONSTARTUP + 代表 + os.system('cls')。非常好。
三联画2012年

@Triptych:使用__repr__和/或__str__这种方式的一个有趣的副作用是,如果您>>> vars()在解释器控制台中键入,它将执行由此定义的所有命令。例如,在我的系统上,它清除了屏幕,然后退出控制台。花了我一段时间找出到底发生了什么....
martineau

有趣。我看到这个问题也适用于locals()globals()。围绕这些函数的简单装饰器可以删除该名称,并在函数调用后重新分配该名称,这是一个可能的解决方案...
Triptych

@Triptych:装饰器的想法似乎没有用,至少我自己尝试过。提出可行的替代方案被证明是令人惊讶的困难。
martineau 2012年

我有一个候选解决方案,该解决方案只是临时改变vars()globals()和locals()调用的结果:gist.github.com/4172781
Triptych,

28

在Windows上,您可以采用多种方法:

1.使用键盘快捷键:

Press CTRL + L

2.使用系统调用方法:

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

3.使用换行打印100次:

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

5
所有这些方式都很漂亮。cls只能在Windows上运行,并使您的程序难以跨平台运行,打印100 newlines只是... eww?并且程序中未使用键盘快捷键。
路加福音

22

毫无疑问,最快,最简单的方法是Ctrl+ L

对于终端上的OS X,这是相同的。


3
我在Windows 8.1上使用ctrl键使用大写或小写的“ L”来尝试此解决方案。它对我不起作用。我只是打开并关闭外壳窗口以清除它。
克里斯22年

2
在OS X上,按Ctrl + L可以填充终端,直到显示清晰为止。您仍然可以向上滚动以查看历史记录。使用Cmd + K清除显示和打印输出历史记录。 OS X终端热键的更完整列表
Andrew Franklin,

2
在Ubuntu Desktop 16
Nam G VU中

15

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

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 ...所有操作系统。


您可能是说os.name in ('linux','osx'),并且也可能想要添加'posix'
rsanden

@rsanden'linux'和'osx'涵盖了几乎所有实际使用的OS用户。
MartinUbuntu 2015年

我正在运行Ubuntu 15.04,并且os.name == 'posix'同时使用python 2.7.9和3.4.3
rsanden

@rsanden添加了posix。
MartinUbuntu

9

这是一个跨平台(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()

8

刮水器很酷,关于它的好处是我不必在其周围键入'()'。这是它的细微变化

# wiper.py
import os
class Cls(object):
    def __repr__(self):
        os.system('cls')
        return ''

用法很简单:

>>> cls = Cls()
>>> cls # this will clear console.

2
我给它起个名字class cls
martineau 2010年

1
我的名字的实例class Clsclscls = Cls()
Amol

否则会用两件事而不是一件事污染初始名称空间……两倍。
martineau 2011年

@Amol我在解决方案中使用了您和其他人的技术。您可以做class cls然后cls=cls()
阿尔巴·门德斯



5

这是合并所有其他答案的最终解决方案。特征:

  1. 您可以代码复制粘贴到您的shell或脚本中。
  2. 您可以根据需要使用它:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. 您可以其作为模块导入

    >>> from clear import clear
    >>> -clear
  4. 您可以其称为脚本:

    $ python clear.py
  5. 它是真正的多平台 ; 如果它不能识别系统
    centdosposix)将回落到打印空白行。


您可以在此处下载[full]文件: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()


4

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


你怎么闲着呢?只是关闭然后重新打开?
安德里亚·安布

5
否,F6不会重置空闲控制台,但是CTRL+F6会重置。不幸的是,这无法清除屏幕。天哪!(Python Win32空闲版本2.6.2、2.7.1、3.2)。
ridgerunner

4

我不确定Windows的“ shell”是否支持此功能,但是在Linux上:

print "\033[2J"

https://zh.wikipedia.org/wiki/ANSI_escape_code#CSI_codes

在我看来,cls与通话os通常是一个坏主意。想象一下,如果我设法更改系统上的cls或clear命令,并且您以admin或root身份运行脚本。


我同意cls在这种情况下不是理想的选择,而ANSI转义序列更好。与将几个字节推送到stdout相比,使用os调用新进程尤其是一项昂贵的操作。
silviot

2

我在Windows XP SP3上使用MINGW / BASH。

(在.pythonstartup坚持这一点)
#我CTRL-L已经样的工作,但是这可能帮助别人
#树叶窗口虽然...的底部提示
导入的ReadLine
readline.parse_and_bind(“氯\:清屏”)

#这在BASH中有效,因为我也在.inputrc中也有它,但是由于某些
原因,当我进入Python
readline 时它被丢弃了('\ Cy:kill-whole-line')


我再也无法忍受键入'exit()'了,对martineau / Triptych的把戏感到满意:

我虽然稍加修改(将其粘贴在.pythonstartup中)

class exxxit():
    """Shortcut for exit() function, use 'x' now"""
    quit_now = exit # original object
    def __repr__(self):
        self.quit_now() # call original
x = exxxit()

Py2.7.1>help(x)
Help on instance of exxxit in module __main__:

class exxxit
 |  Shortcut for exit() function, use 'x' now
 |
 |  Methods defined here:
 |
 |  __repr__(self)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  quit_now = Use exit() or Ctrl-Z plus Return to exit

2

clearLinux和clsWindows中的OS命令输出一个“魔术字符串”,您可以直接打印该字符串。要获取字符串,请使用popen执行命令并将其保存在变量中以备后用:

from os import popen
with popen('clear') as f:
    clear = f.read()

print clear

在我的机器上,字符串是'\x1b[H\x1b[2J'


1
1)该魔术字符串是ANSI序列\x1b[H表示“将光标移动到左上角”,\x1b[2J表示“清除所有屏幕”。2)在Windows中,无法识别ANSI,因此可能没有任何魔术字符串。
阿尔巴·门德斯

1
凉!同样,对于python3 print('\ x1b [H \ x1b [2J',end =''); 可以避免前面出现新行。
DenMark '17

魔术字符串对我来说适用于使用Python 3.6的Microsoft Windows 10控制台。我为字符串序列加号,而不是与open一起使用。
DevPlayer

2

这是两种不错的方法:

1。

import os

# Clear Windows command prompt.
if (os.name in ('ce', 'nt', 'dos')):
    os.system('cls')

# Clear the Linux terminal.
elif ('posix' in os.name):
    os.system('clear')

2。

import os

def clear():
    if os.name == 'posix':
        os.system('clear')

    elif os.name in ('ce', 'nt', 'dos'):
        os.system('cls')


clear()

如果os.name都不是,为什么不回到打印空行呢?
阿尔巴·门德斯

如果是Jython,那么我想让您知道os.name ='
java'– iChux

看起来不错,这是否意味着该程序可以跨平台使用?
路加福音

2

如果是在Mac上,那么一个简单的方法cmd + k就可以解决问题。



1

这应该是跨平台的,并且还使用所述优选的subprocess.call,而不是os.systemos.system文档。应该适用于Python> = 2.4。

import subprocess
import os

if os.name == 'nt':
    def clearscreen():
        subprocess.call("cls", shell=True)
        return
else:
    def clearscreen():
        subprocess.call("clear", shell=True)
        return


1

我是python的新手(真的很新),在我读的一本书中,他们熟悉该语言,他们教他们如何创建此小功能来清除控制台的可见积压以及过去的命令和打印内容:

打开外壳程序/创建新文档/创建函数,如下所示:

def clear():
    print('\n' * 50)

将其保存在python目录中的lib文件夹中(我的文件夹为C:\ Python33 \ Lib)。下次您需要清除控制台时,只需使用以下函数调用该函数:

clear()

而已。PS:您可以随意命名自己的功能。我见过人们使用“雨刮器”,“擦拭”和其他形式。


1

我正在使用Spyder(Python 2.7),并且要清洁解释器控制台,请使用

%明确

迫使命令行转到顶部,而我不会看到以前的旧命令。

或在控制台环境中单击“选项”,然后选择“ Restart kernel”(删除所有内容)。



1

只需输入

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X

1

如果您不需要通过代码完成操作,只需按CTRL + L


是的,这行得通,但是如果您想在清除控制台的python文件中执行命令,您将不只是让用户键入内容然后告诉他们自己清除它。您将通过代码清除控制台。
madladzen

1

Arch Linux(已在xfce4-terminalPython 3中测试):

# Clear or wipe console (terminal):
# Use: clear() or wipe()

import os

def clear():
    os.system('clear')

def wipe():
    os.system("clear && printf '\e[3J'")

... 添加到 ~/.pythonrc

  • clear() 清除屏幕
  • wipe() 擦除整个终端缓冲区

0

编辑:我刚刚读过“ Windows”,这是给Linux用户的,抱歉。


在bash中:

#!/bin/bash

while [ "0" == "0" ]; do
    clear
    $@
    while [ "$input" == "" ]; do
        read -p "Do you want to quit? (y/n): " -n 1 -e input
        if [ "$input" == "y" ]; then
            exit 1
        elif [ "$input" == "n" ]; then
            echo "Ok, keep working ;)"
        fi
    done
    input=""
done

将其保存为“ whatyouwant.sh”,chmod + x然后运行:

./whatyouwant.sh python

或python以外的其他东西(空闲等)。这将询问您是否确实要退出,如果不是,则重新运行python(或您作为参数给出的命令)。

这将清除所有,屏幕以及您在python中创建/导入的所有变量/对象/所有内容。

在python中,当您要退出时只需键入exit()即可。


0

好的,所以这是一个技术性较差的答案,但是我使用的是Notepad ++的Python插件,事实证明,您可以通过右键单击控制台并单击“清除”来手动清除控制台。希望这可以帮助某人!

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.