有没有办法在 Python 中模拟后台控制台活动?
Posted
技术标签:
【中文标题】有没有办法在 Python 中模拟后台控制台活动?【英文标题】:Is there a way to simulate background console activity in Python? 【发布时间】:2021-10-19 12:27:34 【问题描述】:我可能用奇怪的方式表达了标题,但基本上我希望控制台显示:
'正在加载...'
点循环的地方,在同一行。
-
'正在加载'
'正在加载。'
'正在加载..'
'正在加载...'
我的想法是有四个不同的字符串,打印一个,清除行,打印下一个,等等。
这可以在 Python 中实现吗?也许使用 Windows 控制台命令?
谢谢
【问题讨论】:
你想做什么,更一般地说?为什么要模拟控制台活动? 这能回答你的问题吗? How to manipulate cmd.exe from python, so that the output is shown in the cmd.exe window 使用\r
而不是\n
,您可以移动到行首并在同一位置再次写入print("Loading", end="\r")
,print("Loading.", end="\r")
。或者简单地使用print(".", end="")
在Loading
之后写点而不用清理线。
【参考方案1】:
看到这个: Python Progress Bar
您可以使用进度条,看起来更好(摘自链接) 链接中的代码示例:
from time import sleep
from tqdm import tqdm
for i in tqdm(range(10)):
sleep(3)
60%|██████ | 6/10 [00:18<00:12, 0.33 it/s]
【讨论】:
【参考方案2】:如果您在print()
中使用end="\r"
,则它不会转到下一行,但会移至行首 - 然后您可以在同一行再次写入。
import time
print("Loading", end="\r")
time.sleep(1)
print("Loading.", end="\r")
time.sleep(1)
print("Loading..", end="\r")
time.sleep(1)
print("Loading...", end="\r")
time.sleep(1)
print() # move to next line
当您必须更改行中的文本时,这会很有用。
但是对于添加点,使用end=""
在同一行写入会更简单
import itme
print("Loading", end="")
for _ in range(3):
time.sleep(1)
print(".", end="")
print() # move to next line
部分模块使用此方法绘制progressbar
顺便说一句:
您也可以\r
和end=""
将光标保持在行尾
import time
print("\rLoading", end="")
time.sleep(1)
print("\rLoading.", end="")
time.sleep(1)
print("\rLoading..", end="")
time.sleep(1)
print("\rLoading...", end="")
time.sleep(1)
print() # move to next line
如果新文本比旧文本短,则应在末尾写空格以删除以前的文本。
import time
print("\r....", end="")
time.sleep(1)
print("\r... ", end="")
time.sleep(1)
print("\r.. ", end="")
time.sleep(1)
print("\r. ", end="")
time.sleep(1)
print("\r ", end="")
print() # move to next line
如果您想同时显示其他文本,则可能需要使用curses、urwind、npyscreen 等模块,该模块可以使用特殊代码将光标移动到(某些)终端的不同位置。
【讨论】:
以上是关于有没有办法在 Python 中模拟后台控制台活动?的主要内容,如果未能解决你的问题,请参考以下文章