【发布时间】:2015-07-05 10:15:16
【问题描述】:
我正在寻找一种从 Python 脚本中清除终端回滚的简单方法。我知道os.system('clear'),但是这只会打印新行,隐藏回滚历史记录,不删除它。有没有办法做到这一点?谢谢!
【问题讨论】:
我正在寻找一种从 Python 脚本中清除终端回滚的简单方法。我知道os.system('clear'),但是这只会打印新行,隐藏回滚历史记录,不删除它。有没有办法做到这一点?谢谢!
【问题讨论】:
在 Python 2 中使用以下内容:
>>> print '\033c',
以及 Python 3 中的以下内容:
>>> print('\033c', end=None)
这些语句输出Escc,即VT100 escape sequence for "Reset Device"。
【讨论】:
echo,但是当使用 os.system() 时,它会有点混乱,所以这里使用 printf。
os.system("printf ...") 是高度冗余的:它生成一个 shell 进程只是为了将某些内容打印到标准输出!您可以在 Python 中使用 print:print('\033\143')
printf 方法没有。我不确定这是什么原因......可能是print末尾的换行符?
print('\033\143', end='')。对于 Python 2,你会得到丑陋的 print '\033\143',(注意结尾的逗号)。
如前所述,可以在终端上使用硬件重置,即\033c。这行得通,但即使对于终端仿真器,也会产生一些不需要的效果,例如重置颜色。
如果您使用的是xterm,则它具有执行此操作的特定控制序列\033[3J(请参阅XTerm Control Sequences,即"Ps = 3 -> Erase Saved Lines (xterm).")。 OSX 终端显然没有实现这一点,如下所述。
对于特定于 OSX 的行为,这个问题之前被问过,例如,
osascript 实用程序。有趣的是,建议的替代方案之一是 \033[3J,但这在我的 Mac 上不起作用。osascript 的最简单用法的问题,它可能会清除错误的窗口,并提供与以下不同的答案:How do I reset the scrollback in the terminal via a shell command?,例如,
osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'
(我已经测试了最后一个,它对我有用)。
【讨论】:
\033[3J,我发现printf '\e[3J' 也清除了回滚。三种方法中最好的吗? @Dietrich @A.J.
\e 是对\033 的一种贬义(但如前所述,由于它不适用于我的 Mac,它可能不适用于所有人)。