2014-02-26 35 views
9

這差不多就是我現在所擁有的:的Python如何使簡單的動畫加載,而進程正在運行

import time 
import sys 

done = 'false' 
#here is the animation 
def animate(): 
    while done == 'false': 
     sys.stdout.write('\rloading |') 
     time.sleep(0.1) 
     sys.stdout.write('\rloading /') 
     time.sleep(0.1) 
     sys.stdout.write('\rloading -') 
     time.sleep(0.1) 
     sys.stdout.write('\rloading \\') 
     time.sleep(0.1) 
    sys.stdout.write('\rDone!  ') 

animate() 
#long process here 
done = 'false' 

,我想要得到它,使「而」腳本將獨立運作,並繼續進行,當動畫繼續進行時,直到過程結束時,變量「完成」指示爲「假」,停止動畫並將其替換爲「完成!」。這種方法本質上是一次運行兩個腳本;有沒有辦法做到這一點?

+0

當然是可以做到的,你將不得不使用多處理http://docs.python.org/2/library/multiprocessing.html,其中一人將處理STD :out和其他會做邏輯。 –

回答

14

用螺紋:

import itertools 
import threading 
import time 
import sys 

done = False 
#here is the animation 
def animate(): 
    for c in itertools.cycle(['|', '/', '-', '\\']): 
     if done: 
      break 
     sys.stdout.write('\rloading ' + c) 
     sys.stdout.flush() 
     time.sleep(0.1) 
    sys.stdout.write('\rDone!  ') 

t = threading.Thread(target=animate) 
t.start() 

#long process here 
time.sleep(10) 
done = True 

我還做了幾個小的修改到您的animate()功能,唯一真正重要的一個是加入sys.stdout.write()來電之後sys.stdout.flush()

+0

謝謝,這正是我需要的! –

+0

使用此功能時,我無法鍵盤中斷程序。有關如何解決這個問題的任何想法? – spacedSparking

0

試試這個

import time 
import sys 


animation = "|/-\\" 

for i in range(100): 
    time.sleep(0.1) 
    sys.stdout.write("\r" + animation[i % len(animation)]) 
    sys.stdout.flush() 
    #do something 
print("End!") 
相關問題