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

How to Create a Namespace in Aerospike Database

                      T his post is about creating a namespace in Aerospike. I could not find any concrete method to create a namespace like create database in MySQL and MongoDB. So I am suggesting a way to create a namespace in Aerospike Database. Step-1: Locate config file aerospike.conf and open it in your favorite editor and make sure you have permission to modify the file. In my system the path of file /etc/aerospike/aerospike.conf (Default in Ubuntu). Here the content of the file. # Aerospike database configuration file. service { user root group root paxos-single-replica-limit 1 # Number of nodes where the replica pidfile /var/run/aerospike/asd.pid service-threads 4 transaction-queues 4 transaction-threads-per-queue 4 proto-fd-max 15000 } logging { # Log file must be an absolute path. file /var/log/aerospike/aerospike.log { context any info } } network { service { address any port 3000 } heartbeat { mode multicast address 239.1.99.222 p

java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager

If you are trying to get started with Janus Graph with Apache Cassandra. You may get the following error. Caused by: org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:219) ~[janusgraph-cassandra-0.2.0.jar:na] at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:198) ~[janusgraph-cassandra-0.2.0.jar:na] ... 48 common frames omitted Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused) at org.apache.thrift.transport.TSocket.open(TSocket.java:187) ~[libthrift-0.9.2.jar:0.9.2] at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81) ~[libthrift-0.9.2.jar:0.9.2] at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeR

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