是否存在任何标准的“附带电池”方法来清除Python脚本中的终端屏幕,或者我必须去诅咒(库,而不是单词)?


当前回答

您可以尝试使用clear,但它可能并非在所有Linux发行版上都可用。在windows上使用你提到的cls。

import subprocess
import platform

def clear():
    subprocess.Popen( "cls" if platform.system() == "Windows" else "clear", shell=True)

clear()

注意:控制终端屏幕可能被认为是一种糟糕的形式。你在考虑使用期权吗?让用户自己决定是否要清除屏幕可能会更好。

其他回答

您可以对terminfo数据库进行分解,但这样做的函数无论如何都是在curses中。

对我来说,最优雅的说法是:

import os
os.system('cls||clear')

前段时间偶然发现的

def clearscreen(numlines=100):
  """Clear the console.
numlines is an optional argument used only as a fall-back.
"""
# Thanks to Steven D'Aprano, http://www.velocityreviews.com/forums

  if os.name == "posix":
    # Unix/Linux/MacOS/BSD/etc
    os.system('clear')
  elif os.name in ("nt", "dos", "ce"):
    # DOS/Windows
    os.system('CLS')
  else:
    # Fallback for other operating systems.
    print('\n' * numlines)

然后使用clearscreen()

对于Windows,只能在解释器命令行上(而不是GUI)!简单的类型: (记住在python中使用适当的缩进):

import os
def clear():
    os.system('cls')

每次在shell(命令行)上输入clear(),它都会清除shell上的屏幕。如果退出shell,那么在打开新的Python(命令行)shell时,必须重新执行上述操作。

注意:无论你使用的是哪个版本的Python,明确地(2.5、2.7、3.3和3.4)。

公认的答案是一个很好的解决方案。问题是,到目前为止,它只适用于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中清除屏幕,这也可能是有用的。