是否存在任何标准的“附带电池”方法来清除Python脚本中的终端屏幕,或者我必须去诅咒(库,而不是单词)?
当前回答
一个简单的跨平台解决方案是在Windows上使用cls命令,或者在Unix系统上使用clear命令。与os连用系统,这是一个很好的一行:
import os
os.system('cls' if os.name == 'nt' else 'clear')
其他回答
只使用:
print("\033c")
这将清除终端窗口。
所以我想在这里发表我的意见…
似乎没有人对这个问题提供一个真实的答案,每个人的回答都是“不使用os.system()这是邪恶的!!”没有解释,也没有提供依赖于打印新行的解决方案。
对于那些需要清除终端屏幕并向后滚动的用户,无论出于何种原因,您都可以使用以下代码:
import os
def clear():
'''
Clears the terminal screen and scroll back to present
the user with a nice clean, new screen. Useful for managing
menu screens in terminal applications.
'''
os.system('cls' if os.name == 'nt' else 'echo -e \\\\033c')
print('A bunch of garbage so we can garble up the screen...')
clear()
# Same effect, less characters...
def clear():
'''
Clears the terminal screen and scroll back to present
the user with a nice clean, new screen. Useful for managing
menu screens in terminal applications.
'''
os.system('cls||echo -e \\\\033c')
这达到了OP所期望的效果。它确实使用os.system()命令,所以如果这是邪恶的,有人知道使用subprocess.call()实现这一点的方法,请评论,因为我也更喜欢使用subprocess,但根本不熟悉它。
你可以自己做。这将不依赖于你的终端,或操作系统类型。
def clear(num):
for i in range(num): print
clear(80)
print "hello"
公认的答案是一个很好的解决方案。问题是,到目前为止,它只适用于Windows 10, Linux和Mac。是的,Windows(以缺乏ANSI支持而闻名)!这个新功能是在Windows 10(及以上版本)上实现的,它包括ANSI支持,尽管你必须启用它。这将以跨平台的方式清除屏幕:
import os
print ('Hello World')
os.system('')
print ("\x1B[2J")
在任何低于Windows 10的系统上,它会返回这个:
[2J
这是由于在以前的Windows版本中缺乏ANSI支持。但是,可以使用colorama模块来解决这个问题。这增加了对Windows上ANSI字符的支持:
在Unix和mac上,ANSI转义字符序列长期用于生成彩色终端文本和光标定位。Colorama也在Windows上实现了这一点,它通过包装stdout,剥离它找到的ANSI序列(在输出中作为官书),并将它们转换为适当的win32调用来修改终端的状态。在其他平台上,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上是非常不安全的,是的,它可以工作,但它真的是一个黑客。与脚本在同一字典中的名为“cls.bat”或“cls.exe”的文件将与命令发生冲突,并执行该文件而不是命令,从而产生巨大的安全隐患。
一个最小化风险的方法是改变cls命令被调用的位置:
import os
os.system('cd C:\\Windows|cls' if os.name == 'nt' else 'clear')
这将把Currant Dictionary更改为C:\Window(这里反斜杠很重要),然后执行。C:\Windows始终存在,需要管理权限才能在那里写入,这使得它适合以最小的风险执行此命令。另一种解决方案是通过PowerShell而不是命令提示符运行命令,因为PowerShell已经防范了此类漏洞。
在这个问题中还提到了其他方法:在shell中清除屏幕,这也可能是有用的。
一个纯Python解决方案。 不依赖于ANSI或外部命令。 只有您的终端必须能够告诉您视图中有多少行。
from shutil import get_terminal_size
print("\n" * get_terminal_size().lines, end='')
Python版本>= 3.3.0
推荐文章
- 使用散射数据集生成热图
- python:将脚本工作目录更改为脚本自己的目录
- 如何以编程方式获取python.exe位置?
- 如何跳过循环中的迭代?
- 使用Pandas为字符串列中的每个值添加字符串前缀
- ImportError:没有名为matplotlib.pyplot的模块
- 在python中遍历对象属性
- 如何在Python中使用方法重载?
- 在Python中提取文件路径(目录)的一部分
- 如何安装没有根访问权限的python模块?
- 尝试模拟datetime.date.today(),但不工作
- 将行添加到数组
- 如何在Python中直接获得字典键作为变量(而不是通过从值搜索)?
- Python:为什么functools。部分有必要吗?
- 如何用python timeit对代码段进行性能测试?