命令提示符中的“等待”动画 (Python)

问题描述 投票:0回答:6

我有一个Python脚本,需要很长时间才能运行。我非常希望命令行输出有一些“等待”动画,就像我们在浏览器中针对 AJAX 请求得到的漩涡圆圈一样。类似于“\”的输出,然后将其替换为“|”,然后是“/”,然后是“-”、“|”等,就像文本在绕圈一样。我不知道如何替换Python中以前打印的文本。

python animation command
6个回答
38
投票

使用

\r
并打印不带换行符(即后缀带有逗号):

animation = "|/-\\"
idx = 0
while thing_not_complete():
    print(animation[idx % len(animation)], end="\r")
    idx += 1
    time.sleep(0.1)

对于 Python 2,请使用以下

print
语法:

print animation[idx % len(animation)] + "\r",

12
投票

只是另一个漂亮的变体

import time

bar = [
    " [=     ]",
    " [ =    ]",
    " [  =   ]",
    " [   =  ]",
    " [    = ]",
    " [     =]",
    " [    = ]",
    " [   =  ]",
    " [  =   ]",
    " [ =    ]",
]
i = 0

while True:
    print(bar[i % len(bar)], end="\r")
    time.sleep(.2)
    i += 1

6
投票

如果您正在安装某些东西,加载栏很有用。

animation = [
"[        ]",
"[=       ]",
"[===     ]",
"[====    ]",
"[=====   ]",
"[======  ]",
"[======= ]",
"[========]",
"[ =======]",
"[  ======]",
"[   =====]",
"[    ====]",
"[     ===]",
"[      ==]",
"[       =]",
"[        ]",
"[        ]"
]

notcomplete = True

i = 0

while notcomplete:
    print(animation[i % len(animation)], end='\r')
    time.sleep(.1)
    i += 1

如果你想让它持续几秒钟

if i == 17*10:
    break

之后

i += 1

1
投票

我认为最佳实践是,您可以在循环末尾放置一个 if 条件以避免溢出,在等待函数持续时间超过 expexted 的情况下使用“idx”变量:

import time

animation_sequence = "|/-\\"
idx = 0
while True:
    print(animation_sequence[idx % len(animation_sequence)], end="\r")
    idx += 1
    time.sleep(0.1)

    if idx == len(animation_sequence):
        idx = 0

    # Verify the change in idx variable
    print(f'   idx: {idx}', end='\r')

0
投票

我喜欢@Warren 的美学,并在此基础上实现个性化。

import time

# User Specification
bar = '========'
width = 8

bar_length = len( bar )
total_width = width + 2 * bar_length

t0 = time.time()
idx = 0

while time.time()-t0<30:
    string = f'{idx * " " + bar: <{total_width }}'
    substring = string[bar_length:bar_length+width]
    print(f'[{substring}]', end='\r')
    idx = (idx + 1) % total_width 
    time.sleep(0.1)

这种方法无需指定加载栏的每个“框架”,并允许您将

bar
替换为您希望看到在屏幕上飞过的任何内容


-1
投票

Python 的内置 curses 包包含用于控制打印到终端屏幕的内容的实用程序。

© www.soinside.com 2019 - 2024. All rights reserved.