是否存在任何标准的“带电池”方法来清除Python脚本中的终端屏幕,还是必须使用curses(库而不是词语)?
请注意:我已按原样保留了HTML标记。如果你只需要清除屏幕,这可能已经足够了。问题是即使在 Linux 版本之间,也没有一种 100% 的跨平台方式来做到这一点。问题在于终端的实现都支持略微不同的东西。我相当确定 "clear" 在任何地方都可以工作。但更 "完整" 的答案是使用 xterm 控制字符移动光标,但这需要 xterm 本身。
如果不知道你的问题更多信息,你的解决方案似乎已经足够了。
被接受的答案是一个好的解决方案。问题在于它目前只能在Windows 10、Linux和Mac上工作。是的,Windows(因其缺乏ANSI支持而闻名)!这个新功能是在Windows 10及以上版本中实现的,包括ANSI支持,不过需要启用它。这将以跨平台的方式清除屏幕:
import os
print ('Hello World')
os.system('')
print ("\x1B[2J")
然而,在Windows 10以下的任何版本中,它会返回这个:
[2J
因此,这是一个跨平台的方法:长期以来,ANSI转义字符序列一直用于在Unix和Mac上生成彩色终端文本和光标定位。Colorama通过包装stdout,在其中查找并剥离ANSI序列(这些序列将出现在输出中的乱码),并将它们转换为适当的win32调用以修改终端的状态,从而使其在Windows上也能够正常工作。在其他平台上,Colorama不起作用。
import sys
if sys.platform == 'win32':
from colorama import init
init()
print('Hello World')
print("\x1B[2J")
或者使用 print(chr(27) + "[2J")
代替 print("\x1B[2J")
。
@poke的答案在Windows上非常不安全,是一种hack方法。如果与脚本相同目录下存在名为cls.bat
或cls.exe
的文件,则会与命令冲突并执行该文件,从而产生巨大的安全隐患。
减少风险的一种方法可能是更改调用cls
命令的位置:
import os
os.system('cd C:\\Windows|cls' if os.name == 'nt' else 'clear')
这将更改当前字典到 C:\Window
(反斜杠在此处很重要),然后执行。 C:\Windows
始终存在并需要管理员权限才能在那里写入,从而使其成为使用最小风险执行此命令的好方法。另一种解决方案是通过 PowerShell 而不是命令提示符运行命令,因为它已经针对此类漏洞进行了保护。
此问题中还提到了其他方法:清除 shell 中的屏幕,这也可能会有用。
for i in xrange(0,100):
print ""
print ('\n' * 100)
,这在 Python 2.x 和 3.x 中都能运行并且更快。 - Noctis Skytower对于 Windows 系统,在解释器命令行中(而非 GUI)!只需键入: (请记得使用 Python 的适当缩进):
import os
def clear():
os.system('cls')
clear()
,它都会清除您的shell屏幕。如果您退出shell,则必须重新执行上述操作,以便在打开新的Python(命令行)shell时再次执行。def cls():
if platform.system() == "Linux":
os.system("clear")
elif platform.system() == "Windows":
os.system("cls")
- m3nda我会这样做,让它看起来更像bash:
只需在主目录下创建一个名为.pythonstartup的文件,并在函数中使用poke的答案
在Linux上:
echo "from subprocess import call
def clear(int=None):
call('clear')
if int == 0:
exit()
clear()" >> $HOME/.pythonstartup ; export PYTHONSTARTUP=$HOME/.pythonstartup ; python
您可以将 export PYTHONSTARTUP=$HOME/.pythonstartup
添加到您的 ./bashrc
文件中。
由于我关心的是空间,因此调用该函数时不会在启动时显示 Python 解释器描述,但您可以删除 clear()
以保留它。
像普通函数一样使用它应该可以解决问题,而不打印退出状态:
>>> clear()
>>> clear(0)
默认情况下,os.system("clear")
/os.system("cls")
将返回 int 类型的 0。
我们可以通过将其赋值给一个变量并删除该变量来完全清除屏幕。
def clear():
if (os.name == 'nt'):
c = os.system('cls')
else:
c = os.system('clear')
del c # can also omit c totally
#clear()
这适用于所有平台,并且在Python 2和3中都可以工作。
def clear(number):
for i in range(number):
print(" ")
然后只需键入clear(数字)
即可清除。
print(""*100)
要慢。而且没必要打印空格。 - Remigiusz Schoida
clear
,因为这样很可能涵盖了大多数情况。请参阅相关问题如何清除Python解释器控制台?。 - martineau