【问题标题】:How to clear terminal (Mac osx) scrollback?如何清除终端(Mac osx)回滚?
【发布时间】:2015-07-05 10:15:16
【问题描述】:

我正在寻找一种从 Python 脚本中清除终端回滚的简单方法。我知道os.system('clear'),但是这只会打印新行,隐藏回滚历史记录,删除它。有没有办法做到这一点?谢谢!

【问题讨论】:

    标签: python macos terminal


    【解决方案1】:

    在 Python 2 中使用以下内容:

    >>> print '\033c',
    

    以及 Python 3 中的以下内容:

    >>> print('\033c', end=None)
    

    这些语句输出Escc,即VT100 escape sequence for "Reset Device"

    【讨论】:

    • @James 从 shell 你应该使用 echo,但是当使用 os.system() 时,它会有点混乱,所以这里使用 printf
    • 感谢您提供的信息!
    • os.system("printf ...") 是高度冗余的:它生成一个 shell 进程只是为了将某些内容打印到标准输出!您可以在 Python 中使用 printprint('\033\143')
    • 似乎更精简。但是,我确实注意到您的方法留下了换行符,因为 printf 方法没有。我不确定这是什么原因......可能是print末尾的换行符?
    • 对于 Python 3,print('\033\143', end='')。对于 Python 2,你会得到丑陋的 print '\033\143',(注意结尾的逗号)。
    【解决方案2】:

    如前所述,可以在终端上使用硬件重置,即\033c。这行得通,但即使对于终端仿真器,也会产生一些不需要的效果,例如重置颜色。

    如果您使用的是xterm,则它具有执行此操作的特定控制序列\033[3J(请参阅XTerm Control Sequences,即"Ps = 3 -> Erase Saved Lines (xterm).")。 OSX 终端显然没有实现这一点,如下所述。

    对于特定于 OSX 的行为,这个问题之前被问过,例如,

    (我已经测试了最后一个,它对我有用)。

    【讨论】:

    • 嗯,再看看\033[3J,我发现printf '\e[3J' 也清除了回滚。三种方法中最好的吗? @Dietrich @A.J.
    • \e 是对\033 的一种贬义(但如前所述,由于它不适用于我的 Mac,它可能不适用于所有人)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2013-07-21
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多