我怎样才能清除解释器控制台?
- 2024-11-26 08:36:00
- admin 原创
- 147
问题描述:
与大多数 Python 开发人员一样,我通常会打开一个控制台窗口并运行 Python 解释器来测试命令、dir()
内容help() stuff
等。
和任何控制台一样,一段时间后,可见的过去命令和打印积压变得混乱,有时在多次重新运行同一命令时会令人困惑。我想知道是否以及如何清除 Python 解释器控制台。
我听说过进行系统调用以及cls
在 Windows 或clear
Linux 上进行调用,但我希望可以命令解释器本身执行某些操作。
注意:我在 Windows 上运行,所以Ctrl
+L
不起作用。
解决方案 1:
正如您所提到的,您可以进行系统调用:
对于 Windows:
>>> import os
>>> clear = lambda: os.system('cls')
>>> clear()
对于 Linux 来说则是:
>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()
解决方案 2:
这里有一些方便且跨平台的功能:
import os
def cls():
os.system('cls' if os.name=='nt' else 'clear')
# Now, to clear the screen
cls()
解决方案 3:
这是你能做的最简单的事情,它不需要任何额外的库。它会清除屏幕并返回>>>
到左上角。
print("[H[J", end="")
更新 1:
由于这个答案引起了一些关注,您可能想知道它是如何工作的。上面的命令打印ANSI 转义码:
代表
ESC
(ANSI 值 27)。[
是一个特殊的转义序列,称为控制序列引入器(CSI)。[H
命令将光标移动到屏幕的左上角。[J
清除从光标到屏幕末尾的屏幕。
可选参数end=""
避免在执行这些命令后打印换行符,因此>>>
保留在最上面一行。
更新2:
您可能希望使用一个附加参数来扩展上述命令 - x
(之前J
):
print("[H[xJ", end="")
如果
x
为 1,它将清除从光标到屏幕开头的内容。如果
x
是 2,它将清除整个屏幕并将光标移动到左上角。如果
x
是 3,它将清除整个屏幕并删除回滚缓冲区中保存的所有行。
因此,此命令将清除所有内容,包括缓冲区:
print("[H[3J", end="")
命令行:
要在 shell(控制台/终端)中清除屏幕,可以使用相同的命令。要清除整个屏幕并删除回滚缓冲区中保存的所有行,请在前面添加 3 J
:
printf "[H[3J"
或者创建别名:
alias cls='printf "[H[3J"'
解决方案 4:
嗯,这里有一个快速破解方法:
>>> clear = "
" * 100
>>> print clear
>>> ...do some other stuff...
>>> print clear
或者为了节省一些输入,将此文件放在您的 python 搜索路径中:
# wiper.py
class Wipe(object):
def __repr__(self):
return '
'*1000
wipe = Wipe()
然后你就可以从解释器中随意执行这些操作了:)
>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe
解决方案 5:
在 Windows 上,有多种方法可以执行此操作:
1.使用键盘快捷键:
Press CTRL + L
2.使用系统调用方法:
import os
cls = lambda: os.system('cls')
cls()
3.使用换行符打印100次:
cls = lambda: print('
'*100)
cls()
解决方案 6:
虽然这是一个老问题,但我想总结一下我认为其他答案中最好的,并添加我自己的一点建议,建议你把这些命令放到一个文件中,并设置你的 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
解决方案 7:
毫无疑问,最快捷、最简单的方法是Ctrl
+ L
。
这与终端上的 OS X 是一样的。
解决方案 8:
完美的cls,也兼容Python2(在.pythonrc文件中):
from __future__ import print_function
cls = lambda: print("c", end='')
并可以通过以下方式从终端调用:
cls()
或者直接:
print("c", end='')
[H[J
仅清除可见屏幕,与 Ubuntu 18.10 之前的命令完全相同clear
。它不会清除回滚缓冲区。向上滚动将显示历史记录。
要模拟此行为,请插入一些终端行,然后按Ctrl+L
并插入更多行。执行后print("[H[J", end="")
,只会删除按“Ctrl + L”后插入的屏幕行。
c
清除一切。
x1bc
可能不会给出相同的结果,因为c
十六进制转义的长度没有明确的限制。
解决方案 9:
我这样做的方法是编写如下函数:
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("
") * 120
然后调用clear()
清除屏幕。这适用于 Windows、OS X、Linux 和BSD ... 所有操作系统。
解决方案 10:
我不确定 Windows 的“shell”是否支持这一点,但在 Linux 上:
print "[2J"
https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes
我认为使用 进行调用cls
通常os
不是一个好主意。想象一下,如果我设法更改了您系统上的 cls 或 clear 命令,并且您以管理员或 root 身份运行脚本。
解决方案 11:
下面是我结合在这个问题中发现的信息制作的跨平台(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()
解决方案 12:
Wiper 很酷。它的好处是我不必在它周围输入“()”。
以下是一个小小的变化
# wiper.py
import os
class Cls(object):
def __repr__(self):
os.system('cls')
return ''
使用方法非常简单:
>>> cls = Cls()
>>> cls # This will clear console.
解决方案 13:
这是合并所有其他答案的最终解决方案。特点:
您可以将代码复制粘贴到您的 shell 或脚本中。
你可以按照你喜欢的方式使用它:
>>> clear()
>>> -clear
>>> clear # <- but this will only work on a shell
您可以将其作为模块导入:
>>> from clear import clear
>>> -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('
'*120)
def __neg__(self): self()
def __repr__(self):
self();return ''
clear=clear()
解决方案 14:
如果是在 Mac 上,那么简单的Cmd
+K
就可以了。
解决方案 15:
使用IDLE。它有许多方便的功能。例如, Ctrl
+F6
重置控制台。关闭并打开控制台是清除它的好方法。
解决方案 16:
clear
Linux 和Windows 中的OS 命令cls
会输出一个“魔法字符串”,您可以直接打印它。要获取该字符串,请使用 popen 执行命令并将其保存在变量中以供日后使用:
from os import popen
with popen('clear') as f:
clear = f.read()
print clear
在我的计算机上,该字符串是'x1b[Hx1b[2J'
。
解决方案 17:
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()
清除整个终端缓冲区
解决方案 18:
这样清晰一点怎么样
- os.system('cls')
这已经是尽可能短了!
解决方案 19:
我在 Windows XP,SP3 上使用 MINGW/BASH。
(将其粘贴在 .pythonstartup 中)
# 我的 ctrl-l 已经起作用了,但这可能对其他人有帮助
# 不过将提示留在窗口底部...
import readline
readline.parse_and_bind('\Cl: clear-screen')
这在 BASH 中有效,因为我在 .inputrc 中也有它,但由于某些
# 原因,当我进入 Python
readline.parse_and_bind('\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
解决方案 20:
我是 Python 的新手(真的真的很新),在我阅读的一本熟悉该语言的书中,他们教我如何创建这个小函数来清除控制台中可见的积压和过去的命令和打印:
打开shell/创建新文档/创建函数如下:
def clear():
print('
' * 50)
将其保存在你的 python 目录中的 lib 文件夹中(我的是 C:\Python33\Lib)下次你需要清除控制台时,只需调用以下函数:
clear()
就是这样。PS:您可以随意命名您的函数。我见过有人使用“wiper”、“wipe”及其变体。
解决方案 21:
这里有两种很好的方法可以实现这一点:
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()
解决方案 22:
这应该是跨平台的,并且还使用首选的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
解决方案 23:
好的,这个答案不太技术性,但我正在使用 Notepad++ 的 Python 插件,事实证明,你只需右键单击控制台并单击“清除”即可手动清除控制台。希望这对某些人有所帮助!
解决方案 24:
我发现最简单的方法就是关闭窗口并运行模块/脚本来重新打开 shell。
解决方案 25:
>>> ' '*80*25
更新:80x25 不太可能是控制台窗口的大小,因此要获取真实的控制台尺寸,请使用pager模块中的函数。Python 未提供核心发行版中类似的任何内容。
>>> from pager import getheight
>>> '
' * getheight()
解决方案 26:
我正在使用 Spyder (Python 2.7),为了清理解释器控制台,我使用
%清除
这会强制命令行转到顶部,并且我将看不到以前的旧命令。
或者我单击控制台环境中的“选项”,并选择“重新启动内核”以删除所有内容。
解决方案 27:
上面提到了魔法字符串 - 我相信它们来自 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
解决方案 28:
我刚刚读完《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()。
解决方案 29:
就用这个..
`print '
'*1000`
解决方案 30:
从 replit使用clear()
:
from replit import clear
clear()