Python - 更优雅地清除终端屏幕

标签 python shell terminal

我知道您可以使用 os.system 执行 clear 来清除 shell,但这种方式对我来说似乎很困惑,因为命令已记录在历史记录中并且是乱七八糟地解释为作为操作系统用户运行的命令。

我想知道是否有更好的方法来清除命令行脚本中的输出?

最佳答案

print "\033c"

在我的系统上工作。

您还可以缓存由 clear 命令生成的清屏转义序列:

import subprocess
clear_screen_seq = subprocess.check_output('clear')

然后

print clear_screen_seq

任何时候你想清除屏幕。

tput clear command产生相同序列的定义在 POSIX 中。

您可以使用 curses 来获取序列:

import curses
import sys

clear_screen_seq = b''
if sys.stdout.isatty():
    curses.setupterm()
    clear_screen_seq = curses.tigetstr('clear')

优点是您不需要调用 curses.initscr() 来获取具有 .erase() 的窗口对象,.clear() 方法。

要在 Python 2 和 3 上使用相同的源代码,您可以使用 os.write() 函数:

import os
os.write(sys.stdout.fileno(), clear_screen_seq)
我系统上的

clear 命令也尝试使用 tigetstr("E3") 清除回滚缓冲区。

这是 clear.c command 的完整 Python 端口:

#!/usr/bin/env python
"""Clear screen in the terminal."""
import curses
import os
import sys

curses.setupterm()
e3 = curses.tigetstr('E3') or b''
clear_screen_seq = curses.tigetstr('clear') or b''
os.write(sys.stdout.fileno(), e3 + clear_screen_seq)

关于Python - 更优雅地清除终端屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388390/

相关文章:

shell - 在 Gitlab CI 构建中,我无法通过私钥 ssh 进入 AWS EC2

powershell - 如何使用PowerShell参数

powershell - 保留管道输出的颜色

python - os.system 可以启动但不能终止 Python 进程

linux - 从 bash 脚本运行的 perl 脚本的状态

python - 使用 python 和 wxWidget 在 Raspberry Pi 上实时绘图

linux - 列出目录及其文件,将它们分组在一行上以进行标记化

macos - udp 上的 ffmpeg 原始视频

python - Linux 中 Python 父进程和 C 子进程之间的通信

python - 替换字符串列表元素中的字符