使用Colorama向上移动光标在屏幕底部有问题



我在Windows 7(位(上的Python(32位2.7.2(中使用Colorama(64位(,它非常适合在控制台中为文本着色,但是在让它移动光标时遇到了问题。

具体来说,如果我使用 ANSI 代码向上移动一行,当光标远离屏幕底部时它可以工作,但是当光标靠近底部时,光标无法正确向上移动,然后文本开始进一步打印页面导致它滚动。

我用来向上移动一行的代码是:

sys.stdout.write('x1b[4A')
其中 4 将其向上移动

四行(类似于"\x1b[8A"的内容会将其向上移动八行(

我不确定这是否是我对ANSI代码的工作原理缺乏了解,或者这是否是科罗拉马州的问题。

要重新创建它,请在普通的Windows命令提示符(cmd.exe(或Console2中运行类似的东西(似乎没有区别(

from __future__ import print_function
import colorama
from colorama import Fore, Back, Style
import sys
def main():
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    print('Blah')
    sys.stdout.write('x1b[6A')
    sys.stdout.write('some text')
if __name__ == '__main__':
    main()
如果你在屏幕

顶部附近运行上面的代码,它最终会在">Blah"输出中写入"一些文本",但如果你在屏幕底部附近启动它,">一些文本"将在最后,光标似乎根本没有向后滚动。

我特别需要向上移动光标,以便将其放置在相对于其他输出的基础上,而不是给它一个绝对的屏幕位置(即将它移动到位置 x,y(

关于从哪里开始的任何建议?

需要

添加colorama.init()。它在Windows中是必不可少的,但在*nix系统中是可选的。

在 Windows 上,调用 init(( 将从发送到 stdout 或 stderr 的任何文本中过滤出 ANSI 转义序列,并将它们替换为等效的 Win32 调用。在其他平台上,调用 init(( 不起作用。

要在程序退出之前停止使用 colorama,只需调用 deinit() 即可。这会将标准输出和标准输出恢复到其原始值,以便禁用科罗拉马州。要再次恢复使用科罗拉马州,请致电reinit();再次拨打init()更便宜(但做同样的事情(。

colorama.init()接受一些 **kwarg 来覆盖其默认行为。

默认值为

colorama.init(convert = True, wrap = True, autoreset=False, strip = None)

init(autoreset=True) 将在每次语句后重置颜色/换行/条带更改。

colorama.init(autoreset=True) # 将颜色重置为默认值,对于每个语句

colorama.init(convert = True) # 的工作方式与 colorama.init(( 相同

colorama.init(convert = False) # 当我们想要停止颜色变化时使用

colorama.init(wrap = True) # 的工作方式与 colorama.init(( 相同

colorama.init(convert = False) # 当我们想要停止颜色变化时使用

您应该从colorama导入"init"并调用"init((",然后再尝试向上移动光标。

最新更新