python overwrite previous line

Cinder picture Cinder · Mar 25, 2012 · Viewed 23.9k times · Source

how do you overwrite the previous print in python 2.7? I am making a simple program to calculate pi. here is the code:

o = 0
hpi = 1.0
i = 1
print "pi calculator"
acc= int(raw_input("enter accuracy:"))
if(acc>999999):
        print "WARNING: this might take a VERY long time. to terminate, press CTRL+Z"
print "precision: " + str(acc)
while i < acc:
        if(o==0):
                hpi *= (1.0+i)/i
                o = 1
        elif(o==1):
                hpi *= i/(1.0+i)
                o = 0
        else:
                print "loop error."
        i += 1
        if i % 100000 == 0:
                print str(hpi*2))
print str(hpi*2))

It basicly outputs the current pi after 100000 calculations. how can I make it overwrite the previous calculation?

Answer

rkhayrov picture rkhayrov · Mar 25, 2012

Prefix your output with carriage return symbol '\r' and do not end it with line feed symbol '\n'. This will place cursor at the beginning of the current line, so output will overwrite previous its content. Pad it with some trailing blank space to guarantee overwrite. E.g.

sys.stdout.write('\r' + str(hpi) + ' ' * 20)
sys.stdout.flush() # important

Output the final value as usual with print.

I believe this should work both in most *nix terminal emulators and Windows console. YMMV, but this is the simplest way.