Код Python для анимации вращающегося вентилятора, чтобы он появился на месте - PullRequest
4 голосов
/ 25 марта 2011

Мне нужно распечатать вращающийся вентилятор на основе этого ответа с 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 ]

3 голосов
/ 25 марта 2011

Вот ваше общее решение:

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 голосов
/ 25 марта 2011

\n (новая строка) автоматически вставляется вашим оператором print.Чтобы избежать этого, используйте запятую в своем утверждении.

Если вы хотите, чтобы ваш поклонник находился на отдельной строке, используйте:

print icons[I]+"\r",

\r представляетвозврат каретки.

Если вы хотите, чтобы ваш вентилятор находился в конце непустой строки, используйте \b для символа возврата:

print icons[I]+"\b",

, но не пишитечто-нибудь, кроме символов фанатов после него.

Поскольку у печати есть и другие особенности, вы можете использовать kshahar, предложив использовать sys.stdout.write().

1 голос
/ 25 марта 2011
def spin():
    sys.stdout.write('\\')
    sys.stdout.fflush()
    time.sleep(1)
    sys.stdout.write('\b|')

Это начало. print печатает новые строки; sys.stdout.write нет. Символ \b является пробелом, а fflush иногда необходим для очистки буферов при печати неполных строк. Вы должны быть в состоянии расширить этот метод для работы с вашим кодом довольно легко.

0 голосов
/ 25 марта 2011

Вы можете использовать sys.stdout.write для печати без новых строк

sys.stdout.write(icons[I])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...