Python代码,用于设置旋转风扇的动画以显示到位

Python代码,用于设置旋转风扇的动画以显示到位,python,printing,Python,Printing,我需要打印出旋转风扇的基础上与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(): retur

我需要打印出旋转风扇的基础上与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代码是什么

您可以使用sys.stdout.write打印而不使用新行

sys.stdout.write(icons[I])
\n
(新行)由您的
print
语句自动插入。避免这种情况的方法是在语句结尾加逗号

如果您想让您的粉丝自己在线,请使用:

print icons[I]+"\r",
\r
表示回车

如果希望风扇位于非空行的末尾,请使用
\b
作为退格字符:

print icons[I]+"\b",
但要小心,除了后面的粉丝角色之外,不要再写别的东西

由于print还有一些其他特性,您可能希望按照kshahar的建议使用
sys.stdout.write()


这是一个开始<代码>打印打印换行符
sys.stdout.write
不执行此操作。
\b
字符是一个退格,打印不完整的行时,有时需要使用
fflush
来刷新缓冲区。您应该能够扩展此方法以非常轻松地使用代码。

以下是您的总体解决方案:

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

你想让风扇的动画出现在适当的位置吗?@juxstapose:是的,没错。我将更新问题。缺少刷新…stdout.flush()+1以显示我
itertools.cycle
我想知道我是否会停止在itertools中查找隐藏的宝石。
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