Skip to main content

Waiting Animation in Python Script

It is very often that we are writing some scripts and we need to put some sleep before executing the next step. During the sleep time of script Either you can use simple sleep and print a line or you can use little waiting animation during the sleep. Try running the below script, It will provide you some animation during sleeping time.

The script is quite simple and self-explanatory. Feel free to modify and experiment with the script to get some kooler waiting animation.

import time
import sys
import random

###################- Core Methods -################
def next_pos(i, fwd):
    if fwd:
        return i+1
    else:
        return i-1;


def nextchar_cursor(pattern):
    while True:
        for cursor in pattern:
            yield cursor


#######- Simple spin and wait -#####################

def spinner(speed, wt):
    cursor = nextchar_cursor("-/\\|")
    st = 1.0 / speed
    for i in range(wt):
      rs = "%3d" % (wt-i)
      for j in range(speed):
        sys.stdout.write("-> "+rs+"s   "+cursor.next()+" \r")
        sys.stdout.flush()
        time.sleep(st)

#######- Simple Oscillator -#####################

def oscillator(speed, ln):
    cs = "_-`-" #Unit pattern
    w = 4 #Max no. of cs units
    wl = 12 #Oscillator Length
    ca = (w*cs)
    span = len(ca) - wl
    st = 1.0 / speed
    fwd = True
    idx = 0
    for i in range(ln):
      rs = "%3d" % (ln - i)
      for j in range(speed):
        f1 = (" "*idx)
        f2 = ca[idx:idx+wl]
        f3 = (" "*(len(ca) - idx - wl))
        fp = lp = '|'
        if len(f1) == 0:
            fp = "/"
        if len(f3) == 0:
            lp = "\\"
        ns =  fp+ f1 +  f2 + f3 + lp
        sys.stdout.write('-> '+rs+'s     '+ns+'\r')
        sys.stdout.flush()
        time.sleep(st)
        idx = next_pos(idx, fwd)
        if(idx ==0): fwd = True
        if(idx == span): fwd = False


#######- Vertigo Oscillator -################
def vertigo_oscillator(speed, ln):
    chars = nextchar_cursor("/\\")
    cs = "    "
    w = 10
    ca = (w*cs)
    N = len(ca)
    st = 1.0 / speed
    fwd = True
    idx = 0
    for i in range(ln):
      rs = "%3d" % (ln - i)
      for j in range(speed):
        ns = ca[0:idx]+chars.next()+ca[idx+1:N]
        sys.stdout.write('-> '+rs+'s |'+ns+'|\r')
        sys.stdout.flush()
        time.sleep(st)
        idx = next_pos(idx, fwd)
        if(idx ==0): fwd = True
        if(idx == (N-1)): fwd = False


#######- Domino Falling -#####################
def domino_falling(speed, ln):
    chars = nextchar_cursor("/\\")
    cs = "_-`-"
    w = 15
    ca = (w*cs)
    N = len(ca)
    st = 1.0 / speed
    fwd = True
    idx = 0
    for i in range(ln):
      rs = "%3d" % (ln - i)
      for j in range(speed):
        ns = ca[0:idx]+chars.next()+ca[idx+1:N]
        sys.stdout.write('-> '+rs+'s ['+ns+']\r')
        sys.stdout.flush()
        time.sleep(st)
        idx = next_pos(idx, fwd)
        if(idx ==0): fwd = True
        if(idx == (N-1)): fwd = False

#######- Domino Falling -#####################
def wave(speed, ln):
    cs = "_-`-"
    w = 15
    ca = (w*cs)
    N = len(ca)
    st = 1.0 / speed
    fwd = True
    idx = 0
    for i in range(ln):
      rs = "%3d" % (ln - i)
      for j in range(speed):
        ns = ca[0:idx]+" "+ca[idx+1:N]
        sys.stdout.write('-> '+rs+'s ['+ns+']\r')
        sys.stdout.flush()
        time.sleep(st)
        idx = next_pos(idx, fwd)
        if(idx ==0): fwd = True
        if(idx == (N-1)): fwd = False


#############- Demo -###############################
def demo_all(speed, wt):
    spinner(speed, wt)
    oscillator(speed, wt)
    vertigo_oscillator(speed+5, wt)
    domino_falling(speed, wt)
    wave(speed, wt)


def surprise_me(speed, wt):
    r = random.randint(1,5)
    if r==1:
        spinner(speed, wt)
    elif r==2:
        oscillator(speed, wt)
    elif r==3:
        vertigo_oscillator(speed+5, wt)
    elif r==4:
        domino_falling(speed, wt)
    else:
        wave(speed+2, wt)


demo_all(10, 10)
#surprise_me(12, 10)

Comments

Popular posts from this blog

com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server

If you are trying to connect Mongo DB Server and it insanely throwing following error. com.mongodb.MongoTimeoutException : Timed out after 1000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=192.168.1.10:27010, type=UNKNOWN, state=CONNECTING, exception={ com.mongodb.MongoSecurityException: Exception authenticating MongoCredential {mechanism=null, userName='user123', source='admin', password=<hidden>, mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException: Command failed with error 18 : 'Authentication failed.' on server 192.168.1.10:27010 . The full response is { "ok" : 0.0, "code" : 18, "errmsg" : "Authentication failed." }}}] If you start looking the error content First you encounter with Timeout Exception which may mislead you. It is basically an authentication error. I...

Move like a Ninja on Terminal Console

If you are in IT and do a lot of stuff on terminal, this is the post for you. In the following post, we will explore various key shortcuts to jump and edit on console. Note:- Short keys may behave differnt on differnt OS systems. These keys best work with Linux sytem, For mac OS you have to enable Option key as Meta key in case of Alt . I have never checked these on windows, Please share your experinece with windows in comments. ------------------------------------------------------------------ Edit Control Move forward one char: Ctrl + f Move backward one char: Ctrl + b Move forward one word: Alt + f Move backward one word: Alt + b Move to end: Ctrl + e #Like End Move to start: Ctrl + a #Like Home Jump toggle between current location and start: Ctrl + xx Delete forward one char: Ctrl + d #Like Delete Delete backward one char: Ctrl + h #Like Backspace Delete forward one word: Alt + d Delete backward one word: Ctrl + w Delete to end: Ctrl + k Delete to start: Ctrl + u Undo: Ct...

Easiest Method to Read and Write into Files Streams in Competitive Programming

                      T his article is about easiest way to perform read and write operation from file. File handling is one of the most important aspect of programming and it becomes more important when we do competitive programming. Here are some context when you need to deal with files in comptetive programming. 1) Some specific programming contests like Google Code Jam and Facebook Hacker Cup they provide a file for input. You have to read input from that file and write answers into a file and upload on server within limited time. 2) If you are trying to code for a problem. Suppose the problem was that a square matrix is given and you have to rotate the matrix by 90 degree clock-wise. First line of input indicate the total no. of test cases and first line before matrix represents size of matrix. Then input would be like this. 3 5 10 23 43 34 21 11 13 43 30 71 10 23 43 ...