如何在命令提示符下推当前行打印的文本?(Windows上的Python 3.8)



考虑以下程序:

from time import sleep
from threading import Thread

def speaker():
while True:
sleep(3)
print("[*]I'm speaking........")

if __name__ == "__main__":
my_speaker = Thread(target=speaker)
my_speaker.start()
while True:
msg = input("[Your message]>> ")
print("Your message: " + msg)

如果我在输入中没有键入任何内容,则输出('_'是光标的位置(:

[Your message]>> [*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
_

我想展示的输出:

[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[*]I'm speaking........
[Your message]>> _

当"扬声器"功能执行打印功能时,应执行以下步骤:

  • 将当前行的文本移动到下一行

  • 返回到前一行的开头

  • 执行打印

  • 返回到下一行的末尾

我看了一下这里:https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences我发现了一些有用的东西,比如可以用">\r"回到当前行的开头,但我不想覆盖文本,而是将其移到下一行。

有什么想法吗?

试试这个:

from time import sleep
from threading import Thread

def speaker():
while True:
sleep(3)
print("r[*]I'm speaking........n[Your message]>> ", end="")

if __name__ == "__main__":
my_speaker = Thread(target=speaker)
my_speaker.start()
while True:
msg = input("[Your message]>> ")
print("Your message: " + msg)

我发现的问题是,睡眠的地方(3(让你的输入在你想要的之前出现,因为你想要等待的是输入本身。

下一个问题是,如果你这样做,你的输入将在最后,但它也会向你显示类似"[你的消息]>[*]我在说话……"的内容。我认为这是因为你几乎同时执行输入和循环,它有点"疯了",所以我添加了一个简单的选择触发器,以防止打印工作,并最终将输入到下半部分,而不会出现任何奇怪的结果。

这是一个简单粗暴的解决你问题的办法。

我不认为这是完美的,我很确定有更好的选择来解决这个问题。我自己也是一个编码新手,但我希望我的解决方案能派上用场!

from time import sleep
from threading import Thread

def speaker():
while True:
if opt is not None:
print ("[*]I'm speaking........")
global opt                   
opt = 1
if __name__ == "__main__":
my_speaker = Thread(target=speaker)
my_speaker.start()
while True:
sleep(3)
opt = None
msg = input("[Your message]>> ")
print("Your message: " + msg)

最新更新