del_line.py
import sys
sys.stdout.write("\033[2K\033[G")
sys.stdout.flush()
sample.py
import sys, time
for i in range(10):
s = str(i)*(10-i)
sys.stdout.write("\033[2K\033[G%s" % s)
sys.stdout.flush()
time.sleep(0.5)
print()
La sortie suivante est affichée sur la même ligne toutes les 0,5 seconde, effaçant la sortie précédente.
0000000000
111111111
22222222
3333333
444444
55555
6666
777
88
9
Vous pouvez utiliser quelque chose appelé CSI pour contrôler l'écran de la console pour la sortie standard et la sortie d'erreur. Référence: https://en.wikipedia.org/wiki/ANSI_escape_code En plus d'effacer des caractères, vous pourrez déplacer le curseur et changer la couleur des caractères.
La deuxième ligne \ 033 [2K
de del_line.py correspond à" EL - Effacer en ligne "dans les codes CSI du Wiki ci-dessus, et c'est une commande pour supprimer la ligne avec le curseur. Chaque fois que vous utilisez CSI avec le message que \ 033 [
utilisera CSI, il sera affiché en premier.
Le «2» suivant correspond à l'argument.
--Effacer de la position du curseur à la fin de la ligne si «0» ou omis
--Si 1
, supprimer du début de la ligne à la position du curseur
--Si 2
, supprimez la ligne avec le curseur
Ce sera. del_line.py efface toute la ligne. Le «K» final détermine le type de CSI.
Comme expliqué dans le Wiki, "EL - Effacer en ligne" a la propriété de ne pas changer la position du curseur, donc si vous voulez sortir des caractères après la ligne effacée, vous devez déplacer manuellement le curseur au début de la ligne. Il y a.
Ceci peut être réalisé en utilisant "CHA - Cursor Horizontal Absolute". L'explication sur le Wiki dit "Déplace le curseur vers la colonne n (par défaut 1)", donc si vous sortez le code CSI avec n mis à 1 ou omis, le curseur se déplacera vers la première colonne (début de ligne). Le code CSI est CSI n G
, remplacez donc la partie CSI par \ 033 [
pour en faire \ 033 [G`.
À l'origine, je voudrais que les caractères disparaissent tels quels, mais en Python, lors de la sortie de caractères, ils sont enregistrés une fois dans le tampon et sortis à la fois au moment du saut de ligne. Par conséquent, même si vous avez l'intention de sortir le code CSI pour effacer les caractères du code source, il ne sera pas reflété sur l'écran réel. Par conséquent, sys.stdout.flush ()
sort explicitement la chaîne de caractères stockée dans le tampon et la reflète à l'écran.
Avec ce qui précède, les caractères émis vers la console peuvent être effacés.
print("abc\033[1D\033[K")
Résultat de sortie
ab
\ 033 [1D
déplace le curseur vers la gauche et \ 033 [K
supprime du curseur à la fin de la ligne.
--Si la longueur des chaînes de caractères à afficher en continu est la même, ou si la sortie suivante est plus longue, vous pouvez l'écraser en déplaçant simplement le curseur au début de la ligne sans la commande d'effacement.
cat
etc.Recommended Posts