Δημοσιεύτηκε: 22 Ιούλ 2009, 19:36
από medigeek
Ποσοστό επεξεργασίας (επανεγγραφή στην ίδια γραμμή)

Python 2.6 (δουλεύει και σε python3.0):
Κώδικας: Επιλογή όλων

#!/usr/bin/python2.6
import time, sys

print("File processing simulation:")
sys.stdout.write("Processing file 0%..")
sys.stdout.flush()

for percentage in range(10, 101, 10):
time.sleep(1)
sys.stdout.write("%d%%.." % (percentage))
sys.stdout.flush()
print("done!\n")

print("Download simulation:")
sys.stdout.write("Downloading 0%\r")
sys.stdout.flush()

for percentage in range(1, 100, 1):
sys.stdout.write("Downloading %d%%\r" % (percentage))
sys.stdout.flush()
time.sleep(0.1)

print("Downloading 100%")
print("All done!")


Τώρα επειδή η εντολή print() στην python3 υποστηρίζει sep="" και end="", μπορούμε να χρησιμοποιήσουμε το end="":
Κώδικας: Επιλογή όλων
#!/usr/bin/python3.0
import time, sys

print("File processing simulation:")
print("Processing file 0%..", end="")
sys.stdout.flush()

for percentage in range(10, 101, 10):
time.sleep(0.5)
print("%d%%.." % (percentage), end="")
sys.stdout.flush()
print("done!\n")

print("Download simulation:")
print("Downloading 0%", end="\r")

for percentage in range(1, 100, 1):
print("Downloading %d%%" % (percentage), end="\r")
time.sleep(0.1)

print("Downloading 100%")
print("All done!")


Το αποτέλεσμα είναι το ίδιο, αλλά...
απ' ό,τι βλέπετε στην τελευταία περίπτωση δε χρειάζεται το "sys.stdout.flush()" (να το αποστέλνει δηλαδή στην οθόνη και να μην περιμένει άλλα δεδομένα)



\r ;;;
Το \r λέγεται "carriage return". Τι κάνει; Το επιστρέφει τη «θέση επεξεργασίας» στην αρχή, για να ξαναγράψει απο πάνω αυτά που πρέπει.