如何清除解释器控制台?

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

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

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

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

892679 次浏览

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

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

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

Windows:

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

对于Linux,它将是:

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

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

编辑:我刚刚读了“windows”,这是针对linux用户的,抱歉。


在bash中:

#!/bin/bash


while true; 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以外的东西(idle,随便什么)。 这将询问你是否真的想退出,如果不是,它将重新运行python(或你作为参数给出的命令)

这将清除所有,屏幕和所有变量/对象/任何你在python中创建/导入的东西。

在python中,当你想退出时,只需输入exit()。

这里有一些更方便的跨平台的东西

import os


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


# now, to clear the screen
cls()

雨刷很酷,它的好处是我不需要在它周围输入'()'。 这里有一个轻微的变化

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

用法很简单:

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

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

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

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

不管怎样,这里是我对放入(或添加到你现有的)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 ====

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

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


quit = exit = exit()

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

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


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

这应该是跨平台的,并且也使用首选的subprocess.call而不是根据os.system文档os.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.

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.system('cls')

这是最短的了!

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

(插入到.pythonstartup中)
#我的ctrl-l已经有点工作了,但这可能有助于其他人
#在窗口底部留下提示符 进口readline < br > readline。parse_and_bind('\C-l: clear-screen')

这在BASH中工作,因为我在.inputrc中也有它,但对于一些
#原因当我进入Python时它会被删除
readline。parse_and_bind('\C-y: kill-whole-line')


我再也无法忍受输入“exit()”,并对马蒂诺/三联画的技巧感到高兴:

不过我稍微修改了一下(把它放在.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

Linux中的操作系统命令clear和Windows中的操作系统命令cls输出一个“神奇的字符串”,你可以直接打印出来。要获得字符串,使用popen执行命令,并将其保存在变量中以供以后使用:

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


print clear

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

>>> ' '*80*25

更新: 80x25不太可能是控制台窗口的大小,因此要获得真正的控制台尺寸,请使用寻呼机模块中的函数。Python没有提供任何与核心发行版类似的东西。

>>> from pager import getheight
>>> '\n' * getheight()

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

  1. 你可以复制粘贴代码到你的shell或脚本。
  2. 你可以使用它作为你喜欢:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
    
  3. You can import it as a module:

    >>> from clear import clear
    >>> -clear
    
  4. You can call it as a script:

    $ python clear.py
    
  5. It is truly multiplatform; if it can't recognize your system
    (ce, nt, dos or posix) it will fall back to printing blank lines.


You can download the [full] file here: https://gist.github.com/3130325
Or if you are just looking for the code:

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

我是python的新手(非常非常新),在我正在阅读的一本书中,他们教我如何创建这个小函数,以清除控制台可见的积压和过去的命令和打印:

打开shell /创建新文档/创建函数如下:

def clear():
print('\n' * 50)
将它保存在python目录的lib文件夹中(我的是C:\Python33\ lib) 下次你需要清除控制台时,只需调用函数:

clear()
< p >就是这样。 PS:你可以任意命名你的函数。我看到人们使用“雨刷”“擦拭”及其变体。

好吧,这是一个不太技术性的答案,但我使用的是notepad++的Python插件,结果是你可以手动清除控制台,只需右键单击它,然后单击“清除”。希望这能帮助到一些人!

我发现最简单的方法就是关闭窗口并运行模块/脚本重新打开shell。

上面提到的魔术字符串-我相信它们来自terminfo数据库:

http://www.google.com/?q=x#q=terminfo

http://www.google.com/?q=x#q=tput+command+in+unix

$ tput clear| od -t x1z
0000000 1b 5b 48 1b 5b 32 4a                             >.[H.[2J<
0000007

就用这个吧。

print '\n'*1000

我使用Spyder (Python 2.7)和清理我使用的解释器控制台

%明显

这迫使命令行跳转到顶部,我将看不到以前的旧命令。

或者我在控制台环境中单击“选项”并选择“重新启动内核”,这将删除所有内容。

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

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…所有操作系统。< / p >

我不确定Windows的“shell”是否支持这个,但在Linux上:

print "\033[2J"

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

在我看来,用os调用cls通常是一个坏主意。想象一下,如果我设法更改系统上的cls或clear命令,而您以管理员或根用户身份运行脚本。

如果它是在mac上,那么一个简单的cmd + k就可以了。

最快最简单的方法无疑是Ctrl+l

对于终端上的OS X也是一样的。

在Windows上有很多方法:

1. 使用键盘快捷键:

Press CTRL + L

2. 使用系统调用方法:

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

3.使用新行打印100次:

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

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

Arch Linux(在xfce4-terminal中使用Python 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()擦除整个终端缓冲区

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

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

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

cls()

或直接:

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

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

为了模拟这种行为,插入一些终端行,然后按Ctrl+L并插入更多。执行print("\033[H\033[J", end="")后,只有按“Ctrl + l”后插入的屏幕行;将被删除。

\033c清除所有内容。

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

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

set editing-mode vi

它是:

ESC Ctrl-L