Comment animer la ligne de commande?
Je me suis toujours demandé comment les gens de mettre à jour une ligne dans une ligne de commande. un bon exemple de cela est lorsque vous utilisez la commande wget sous linux. Il crée un fichier ASCII de la barre de chargement de toutes sortes qui ressemble à ceci:
[======> ] 37%
et bien sûr, la barre de chargement se déplace et le pourcentage de changements, Mais ce n'est pas une nouvelle ligne. Je ne peux pas comprendre comment le faire. Quelqu'un peut me pointer dans la bonne direction?
Vous devez vous connecter pour publier un commentaire.
Il y a deux façons que je connais pour ce faire:
curses
paquet, si votre langage de programmation de choix a des bindings pour elle.Et Google a révélé ANSI Codes d'Échappement, qui semblent être un bon moyen. Pour référence, voici une fonction en C++ pour ce faire:
Une façon de le faire est à plusieurs reprises de mettre à jour la ligne de texte avec les progrès actuels. Par exemple:
Notez que j'ai utilisé
sys.stdout.write
au lieu deprint
(c'est Python) parce queprint
imprime automatiquement "\r\n" (retour à la ligne) à la fin de chaque ligne. Je veux juste le retour de chariot qui renvoie le curseur au début de la ligne. Aussi, leflush()
est nécessaire parce que, par défaut,sys.stdout
seulement des bouffées de sa sortie après un saut de ligne (ou après son buffer est plein).flush()
? Juste curieux...Le secret est d'imprimer uniquement \r au lieu de \n ou \r\n à la fin de la ligne.
\r est appelé retour chariot et on déplace le curseur au début de la ligne
\n est appelé saut de ligne et l'on déplace le curseur sur la ligne suivante
Dans la console. Si vous utilisez uniquement \r vous d'écraser le déjà écrit une ligne.
Alors d'abord écrire une ligne comme la suivante:
puis ajouter un signe pour chaque tick
et ainsi de suite.
Vous pouvez utiliser 10 caractères, chacun représentant 10%.
Aussi, si vous souhaitez afficher un message lorsque vous avez terminé, n'oubliez pas d'ajouter aussi assez blanc caractères de sorte que vous remplacez le déjà écrit l'égalité des signes comme:
ci-dessous ma réponse,utiliser l'API windowsConsoles(Windows), le codage de C.
bInfo
défini?PowerShell a une Écriture Progrès applet de commande qui crée une console de barre de progression que vous pouvez mettre à jour et modifier votre script s'exécute.
Ici est la réponse à votre question... (python)
Suivi de La réponse de Greg, ici est une version étendue de sa fonction qui vous permet d'afficher plusieurs lignes de messages; il suffit de passer dans une liste ou un tuple de la chaîne de caractères que vous souhaitez afficher/actualiser.
Note: j'ai uniquement testé à l'aide d'un terminal linux, de sorte que votre kilométrage peut varier sur les systèmes Windows.
\n
à\r\n
dans votre script, mais ne pouvait toujours pas faire fonctionner sur windows (vous?). Je l'ai prise en←[A←[A
après quelques messages, je soupçonne que le'\x1b[A'
séquence de ne pas faire ce qu'il doit encmd.exe
.Si votre utilisation d'un langage de script, vous pouvez utiliser le "tput cup" commande pour obtenir ce fait...
P. S. C'est un Linux/Unix seule chose que je sache...