像大多数Python开发人员一样,我通常打开一个控制台窗口,运行Python解释器来测试命令、dir()之类的东西、help()之类的东西,等等。
像任何控制台一样,在一段时间后,过去命令和打印的可见积压会变得混乱,并且在多次重新运行相同的命令时有时会令人困惑。我想知道是否以及如何清除Python解释器控制台。
我听说过做一个系统调用,或者在Windows上调用cls,或者在Linux上清除,但我希望有一些我可以命令解释器本身做的事情。
注意:我在Windows上运行,所以Ctrl+L不起作用。
编辑:我刚刚读了“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()。
虽然这是一个较老的问题,但我认为我应该贡献一些东西,总结我认为最好的其他答案,并建议您将这些命令放入一个文件中,并设置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 XP, SP3上使用MINGW/BASH。
(在.pythonstartup中插入)
#我的ctrl-l已经有点工作了,但这可能会帮助其他人
#在窗口底部留下提示符…
进口readline
readline。parse_and_bind(“\价氯:清除屏幕”)
#这在BASH中工作,因为我在.inputrc中也有它,但对于一些
#当我进入Python时它被删除的原因
readline。parse_and_bind(“\ bxcy: 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
这里有一个最终的解决方案,它融合了所有其他的答案。特点:
您可以将代码复制粘贴到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()
我的方法是这样写一个函数:
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…所有的操作系统。
这是您可以做的最简单的事情,它不需要任何额外的库。它清除屏幕并将>>>返回到左上角。
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"'
完美的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相同的结果,因为十六进制转义没有明确的长度限制。