2014-01-31 2 views
0

К сожалению, я ограничен Python 2.4, и я хочу, чтобы анимация анимации ascii выполнялась во время моего скрипта (т. Е. Кругового круга). Мне просто интересно, какая общая методология или практика для чего-то как это и любые/все ресурсы по отношению к решению, примеры скриптов были бы удивительными !! Я использую os.sytem («команда») и хочу выйти из привычки.Обычная практика для подпроцессов Python

Спасибо!

+0

У вас есть 'curses'? Это позволит вам сделать некоторые причудливые вещи с терминалом (хотя вы должны помнить, что имя библиотеки не является случайным ... вы * будете * говорить довольно некоторые проклятия при обучении/использовании). – Bakuriu

ответ

3

Один из возможных способов сделать это - использовать символ возврата каретки «\ r», чтобы вернуть курсор в начало строки, чтобы вы могли перезаписать ранее написанные символы. Это позволяет создавать анимации, если она подходит для текущей строки. Например:

import time 

def do_a_little_work(): 
    time.sleep(0.1) 

print "about to do work..." 

icons = ["-", "/", "|", "\\"] 
icon_idx = 0 

while True: 
    do_a_little_work() 
    #todo: check if work is done, and break out of the loop. 
    print "\r" + icons[icon_idx], 
    icon_idx = (icon_idx+1)%len(icons) 

print "\rdone." 

Результат:

about to do work... 
- 

Который становится

about to do work... 
/

Который становится

about to do work... 
| 

Который становится

about to do work... 
\ 

и т.д ... В конце концов становится

about to do work... 
done. 

enter image description here


Вы можете использовать threading запустить анимацию одновременно с обычным кодом.

from threading import Thread 
import time 

def do_the_work(): 
    #execute your script here 

work_thread = Thread(target=do_the_work) 
print "Working..." 
work_thread.start() 

icons = ["-", "/", "|", "\\"] 
icon_idx = 0 
while work_thread.is_alive(): 
    time.sleep(0.1) 
    print "\r" + icons[icon_idx], 
    icon_idx = (icon_idx+1)%len(icons) 
print "\rdone" 
+0

Спасибо за ваш ответ, мне действительно интересно, как это происходит одновременно с моими другими сценариями, а не с анимацией себя. – sunshinekitty

+0

Для этого вы можете использовать 'threading'. изм. – Kevin