import time
import sys
import colorama
colorama.init()
print("Line 1")
time.sleep(1)
print("Line 2")
time.sleep(1)
print("Line 3 (no eol)", end="")
sys.stdout.flush()
time.sleep(1)
print("\rLine 3 the sequel")
time.sleep(1)
print("\033[ALine 3 the second sequel")
time.sleep(1)
print("\033[A\033[A\033[ALine 1 the sequel")
time.sleep(1)
print() # skip two lines so that lines 2 and 3 don't get overwritten by the next console prompt
print()
输出:
> python3 multiline.py
Line 1 the sequel
Line 2
Line 3 the second sequel
>
6条答案
按热度按时间2cmtqfgy1#
大多数终端都能理解ANSI escape codes,本用例相关代码:
"\033[F"
-将光标移动到上一行的开头"\033[A"
-将光标上移一行示例(Python):
rsaldnfx2#
不,这并不容易,因为你必须使用像curses library这样的东西,特别是如果你想对光标位置有更多的控制,并通过编程做更多的事情。
这里有一个Programming with Curses上的Python文档的链接,这个简短的tutorial/example可能也会感兴趣。
我刚刚在docs中发现了这张纸条,以防您使用Windows:
还没有人将curses模块移植到Windows平台。在Windows平台上,可以尝试Fredrik Lundh编写的Console模块。Console模块提供光标可寻址的文本输出,以及对鼠标和键盘输入的完全支持,并且可以从http://effbot.org/zone/console-index.htm获得。
我相信对于C有NCurses库,如果你想用C浏览,链接页面有一个关于移动光标的部分。
我错过了关于在终端上/串行地运行这个的部分,因为ANSI转义序列,特别是对于像你这样的简单任务,将是最容易的,我同意@SvenMarnach对此的解决方案。
iq3niunx3#
在Python中尝试一下,并将doSomeTimeConsumingProcessing()替换为所需的任何例程,希望它能有所帮助
wgx48brx4#
回车符可以用来转到行首,ANSI代码
ESC A
("\033[A"
)可以让你上移一行,这可以在Linux上使用,也可以在Windows上使用colorama
包来启用ANSI代码:输出:
实际上,colorama可能使用
SetConsoleMode
来启用Console Virtual Terminal Sequences。jucafojl5#
我也许错了,但是:
在windows标准控制台中。
wfypjpf46#
基于@Sven Marnach答案的简单方法:
\033[A
:将光标向上移动一行。\r
:将光标移动到行首。xxx
:要打印的字符串。如果是变量,则为{xxx}
如果你的字符串后面有一些来自前一行的多余字符,根据前一行的尺子,用白色覆盖它们。