是否可以控制控制台输出的“光标” /在标准输出中添加偏移量而不会覆盖占用偏移量的字符?

时间:2019-03-25 21:46:03

标签: python io console ascii stdout

主要问题...

我想知道(希望)有一种方法来管理控制台输出以允许高级打印实用程序。

具体来说,我想知道是否有一种方法可以将下一个字符将被打印到的位置的“光标”移动到下一个字符空间,而不会覆盖跳过空间中的字符。

我希望有一种解决方案,不涉及安装新模块或跟踪标准输出历史记录。

灵感-回车符

我知道回车符('\ r')可用于将控制台输出的'cursor'移回行首。

从那里开始,我知道您可以打印任何要覆盖的字符,而这些字符将覆盖在stdout中放置的所有字符,而剩下的字符将从先前的输出中保留。

但是,我想在左边保留先前字符中的x个字符,然后写我的输出,必要时覆盖我的行的其余部分。

例如...

我想打印输出:

_____|    Name   |    Desc    |    Task    |    Progress    |
 [1]  Foo         Bar          BarFoo       [====    ] 50.0%

然后可以在不知道名称为“ Foo”和desc为“ Bar”的情况下更新第二行,以将“ FooBar”放在任务下(并更新进度栏...)

_____|    Name   |    Desc    |    Task    |    Progress    |
 [1]  Foo         Bar          FooBar       [=====   ] 62.5%

也就是说,我想用█修改下面显示的字符,同时保持下面显示的字符为X

_____|    Name   |    Desc    |    Task    |    Progress    |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX██████XXXXXXXX████████XX█████X

我知道我可以避免这个问题...

如果我愿意在左侧保留动态行内容,而在右侧保留静态内容,则只要预先知道/限制动态内容的宽度,就可以安全地更新行而不会丢失静态内容。 出于样式原因,我不希望这样做。

我知道我可以设置一些系统来跟踪已打印的内容,然后重新打印以保持静态内容。 我不希望这样,因为我正在处理的内容具有很多并发性,并且要实现图形效果会很繁琐。

我也很好奇是否支持这种功能。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过打印特殊的转义序列任意移动光标。请参阅here以获取参考。