Python代码动画显示旋转风扇保持不动
我想用Python打印一个旋转的风扇,参考了这个答案。
import threading
import subprocess
I = 0
class RepeatingTimer(threading._Timer):
def run(self):
while True:
self.finished.wait(self.interval)
if self.finished.is_set():
return
else:
self.function(*self.args, **self.kwargs)
def status():
global I
icons = ['|','/','--','\\']
print icons[I]
I += 1
if I == 4: I = 0
timer = RepeatingTimer(1.0, status)
timer.daemon = True # Allows program to exit if only the thread is alive
timer.start()
proc = subprocess.Popen([ 'python', "wait.py" ])
proc.wait()
timer.cancel()
这段代码可以让我显示风扇,但它是通过回车来显示的,效果如下。
|
/
--
\
|
/
--
...
请问有什么Python代码可以在不移动光标位置的情况下打印字符?
4 个回答
1
def spin():
sys.stdout.write('\\')
sys.stdout.fflush()
time.sleep(1)
sys.stdout.write('\b|')
这算是个开始。print
会在输出后换行,而 sys.stdout.write
则不会。\b
是一个退格符,fflush
有时候需要用来清空缓冲区,特别是在打印不完整的行时。你应该能很容易地把这个方法扩展到你的代码中。
3
这是你的完整解决方案:
import itertools
import sys
import time
def whirl(max=50):
parts = ['|', '/', '-', '\\']
cnt = 1
for part in itertools.cycle(parts):
if cnt >= max:
break
sys.stdout.write(part)
sys.stdout.flush()
time.sleep(.1)
sys.stdout.write('\b')
cnt += 1
3
\n
(换行符)是你在使用 print
语句时自动加上的。如果你想避免换行,可以在语句的结尾加一个逗号。
如果你想让风扇(fan)单独占一行,可以使用:
print icons[I]+"\r",
\r
代表回车符。
如果你想让风扇出现在一行的末尾,可以使用 \b
这个退格符:
print icons[I]+"\b",
但要注意,退格后不要再写其他字符,除了风扇的字符。
由于 print
还有其他一些特别的地方,你可能想按照 kshahar 的建议,使用 sys.stdout.write()
。