Je me demande comment je pourrais créer un de ces compteurs de console astucieux en Python comme dans certains programmes C / C ++.
J'ai une boucle qui fait des choses et la sortie actuelle est le long des lignes de:
Doing thing 0
Doing thing 1
Doing thing 2
...
ce qui serait mieux serait d'avoir juste la dernière mise à jour de ligne;
X things done.
J'ai vu cela dans un certain nombre de programmes de console et je me demande si / comment je ferais cela en Python.
print
: stackoverflow.com/a/8436827/1959808curses
est une exagération (voir la réponse acceptée).Réponses:
Une solution simple consiste simplement à écrire
"\r"
avant la chaîne et à ne pas ajouter de nouvelle ligne; si la chaîne ne devient jamais plus courte, cela suffit ...Une barre de progression est légèrement plus sophistiquée ... c'est quelque chose que j'utilise:
Vous appelez en
startProgress
passant la description de l'opération, puisprogress(x)
oùx
est le pourcentage et enfinendProgress()
la source
restic
,flatpak
) peuvent mettre à jour plusieurs lignes de sortie de console. Savez-vous par hasard comment cela peut être réalisé?Une solution plus élégante pourrait être:
appeler cette fonction avec
value
etendvalue
, le résultat doit êtreRemarque: version Python 2.x ici .
la source
En python 3, vous pouvez le faire pour imprimer sur la même ligne:
print('', end='\r')
Particulièrement utile pour suivre les dernières mises à jour et progrès.
Je recommanderais également tqdm à partir d'ici si l'on veut voir la progression d'une boucle. Il imprime l'itération actuelle et les itérations totales sous forme de barre de progression avec un temps prévu de fin. Super utile et rapide. Fonctionne pour python2 et python3.
la source
L'autre réponse est peut-être meilleure, mais voici ce que je faisais. Tout d'abord, j'ai créé une fonction appelée progression qui imprime le caractère de retour arrière:
Ensuite, je l'ai appelé en boucle dans ma fonction principale comme ceci:
Cela effacera bien sûr toute la ligne, mais vous pouvez jouer avec elle pour faire exactement ce que vous voulez. J'ai fini par créer une barre de progression en utilisant cette méthode.
la source
Pour tous ceux qui tombent sur cette année plus tard (comme je l'ai fait), j'ai un peu modifié les méthodes de 6502 pour permettre à la barre de progression de diminuer et d'augmenter. Utile dans un peu plus de cas. Merci 6502 pour un excellent outil!
Fondamentalement, la seule différence est que toute la ligne de #s et -s est écrite à chaque fois que progress (x) est appelé et que le curseur est toujours renvoyé au début de la barre.
la source
Si j'ai bien compris (pas sûr) que vous voulez imprimer en utilisant
<CR>
et non<LR>
?Si c'est possible, tant que le terminal de la console le permet (il se cassera lorsque la sortie sera redirigée vers un fichier).
la source
Cela peut être fait sans utiliser la bibliothèque sys si nous regardons la
print()
fonctionVoici mon code:
la source
J'ai écrit ceci il y a quelque temps et je suis vraiment content. Sentez-vous libre de l'utiliser.
Il faut un
index
ettotal
et éventuellementtitle
oubar_length
. Une fois terminé, remplace le sablier par une coche.⏳ Calculating: [████░░░░░░░░░░░░░░░░░░░░░] 18.0% done
✅ Calculating: [█████████████████████████] 100.0% done
J'ai inclus un exemple qui peut être exécuté pour le tester.
J'ai également une version avec une barre de progression réactive en fonction de la largeur du terminal en utilisant
shutil.get_terminal_size()
si cela est intéressant.la source
Ajout d'un peu plus de fonctionnalités à l'exemple d' Aravind Voggu :
Vous pouvez désormais générer plusieurs barres de progression sans remplacer la précédente.
J'ai également ajouté
name
une valeur avec une largeur fixe.la source
Le code ci-dessous comptera le message de 0 à 137 chaque 0,3 seconde remplaçant le numéro précédent.
Nombre de symboles dans les coulisses = nombre de chiffres.
la source