是否存在任何标准的“附带电池”方法来清除Python脚本中的终端屏幕,或者我必须去诅咒(库,而不是单词)?
当前回答
这适用于所有平台,并且在Python 2和3中都有效。
def clear(number):
for i in range(number):
print(" ")
然后输入clear(numberhere)来清除。
其他回答
一个简单的跨平台解决方案是在Windows上使用cls命令,或者在Unix系统上使用clear命令。与os连用系统,这是一个很好的一行:
import os
os.system('cls' if os.name == 'nt' else 'clear')
所以我想在这里发表我的意见…
似乎没有人对这个问题提供一个真实的答案,每个人的回答都是“不使用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,但根本不熟悉它。
这将在Python2或Python3两个版本中工作
print (u"{}[2J{}[;H".format(chr(27), chr(27)))
如果您使用的是Linux/UNIX系统,那么打印ANSI转义序列以清除屏幕就可以了。您还需要将光标移动到屏幕的顶部。这将在任何支持ANSI的终端上工作。
import sys
sys.stderr.write("\x1b[2J\x1b[H")
这将不能在Windows上工作,除非ANSI支持已启用。Windows可能有一个等效的控制序列,但我不知道。
您可以尝试使用clear,但它可能并非在所有Linux发行版上都可用。在windows上使用你提到的cls。
import subprocess
import platform
def clear():
subprocess.Popen( "cls" if platform.system() == "Windows" else "clear", shell=True)
clear()
注意:控制终端屏幕可能被认为是一种糟糕的形式。你在考虑使用期权吗?让用户自己决定是否要清除屏幕可能会更好。