web-dev-qa-db-fra.com

Sortie de console modifiable en Python

Certains programmes sont capables de modifier la sortie de la console, wget me vient facilement à l’esprit.

enter image description here

Comment puis-je faire cela en pur Python? Je sais que IPython a clear_output () . J'ai essayé ça mais même ça ne marche pas. Et je préférerais du pur Python.

from IPython.core.display import clear_output
from time import sleep

for i in range(100):
    clear_output()
    print '[', '='*i, ' '*(100-i), ']'
    sleep(0.1)

asciicast

5
ArekBulski

Il existe actuellement un certain nombre de packages qui vous permettent d'écrire une interface de ligne de commande. Je sais que cliquez sur une barre de progression , par exemple.

Oh, et en ce qui concerne votre exigence "pur python", mon ami est quelque chose de non-rythmique. Python veut que vous utilisiez des packages tiers.

asciicast

5
don.joey

Bien qu'une bibliothèque appropriée soit la meilleure solution, j'aimerais montrer une alternative simple: utilisez \r (retour chariot) au lieu de \n (saut de ligne) pour les fins de ligne, afin que le curseur soit placé au début de la ligne en cours, au lieu de sur la ligne suivante.

#! /usr/bin/python3

from time import sleep

for i in range(100):
    print('[' + '='*i + ' '*(100-i) + ']', end='\r')
    sleep(0.1)
11
muru

La solution suggérée par Helio fonctionne très bien! J'avais besoin de pip install progressbar d'abord, mais ensuite l'un des exemples officiels fonctionne à merveille.

from progressbar import *    
pbar = ProgressBar(widgets=[Percentage(), Bar()], maxval=300).start()
for i in range(300):
    time.sleep(0.01)
    pbar.update(i+1)
pbar.finish()

Site officiel (avec exemples): https://code.google.com/p/python-progressbar/

6
ArekBulski