Comment puis-je envoyer du texte coloré au terminal en Python ?
Mais supposons que mon invite par défaut n'est pas noire - pensez-vous qu'il soit possible de faire en sorte que python se rouvre après ces astuces ?
Comment puis-je envoyer du texte coloré au terminal en Python ?
Cela dépend quelque peu de la plateforme sur laquelle vous vous trouvez. La façon la plus courante de procéder est d'imprimer les séquences d'échappement ANSI. Pour un exemple simple, voici du code Python provenant de l'application Construction de Blender scripts :
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
Pour utiliser un code comme celui-ci, vous pouvez faire quelque chose comme :
print(bcolors.WARNING + "Warning: No active frommets remain. Continue?" + bcolors.ENDC)
Ou, avec Python 3.6+ :
print(f"{bcolors.WARNING}Warning: No active frommets remain. Continue?{bcolors.ENDC}")
Cela fonctionnera sur les systèmes unixes, y compris OS X, Linux et Windows (à condition d'utiliser ANSICON ou dans Windows 10, à condition d'activer Émulation VT100 ). Il existe des codes ANSI pour le réglage de la couleur, le déplacement du curseur, etc.
Si vous comptez vous compliquer la vie (et il semble que ce soit le cas si vous écrivez un jeu), vous devriez vous pencher sur la " malédictions "qui gère pour vous une grande partie des parties compliquées de ce processus. Le site HowTO sur les malédictions en Python est une bonne introduction.
Si vous n'utilisez pas l'ASCII étendu (c'est-à-dire si vous n'êtes pas sur un PC), vous êtes coincé avec les caractères ASCII inférieurs à 127, et '#' ou '@' est probablement votre meilleur choix pour un bloc. Si vous pouvez vous assurer que votre terminal utilise un code IBM jeu de caractères ASCII étendu vous avez beaucoup plus d'options. Les caractères 176, 177, 178 et 219 sont les "caractères de blocage".
Certains programmes modernes basés sur le texte, tels que "Dwarf Fortress", émulent le mode texte en mode graphique et utilisent des images de la police PC classique. Vous pouvez trouver certains de ces bitmaps que vous pouvez utiliser sur la page Dwarf Fortress Wiki voir ( jeux de tuiles créés par l'utilisateur ).
Le site Concours de démonstration en mode texte dispose de plus de ressources pour réaliser des graphiques en mode texte.
Mais supposons que mon invite par défaut n'est pas noire - pensez-vous qu'il soit possible de faire en sorte que python se rouvre après ces astuces ?
Un autre outil utile est UNDERLINE = '\033[4m'
. Que se passe-t-il si ansi.sys
est désactivé sous Windows et vous essayez d'utiliser ces séquences d'échappement ANSI ?
Il y a aussi le Module Python termcolor . L'utilisation est assez simple :
from termcolor import colored
print colored('hello', 'red'), colored('world', 'green')
Ou en Python 3 :
print(colored('hello', 'red'), colored('world', 'green'))
Cependant, il n'est peut-être pas assez sophistiqué pour la programmation de jeux et les "blocs colorés" que vous voulez faire...
Pour que les codes ANSI fonctionnent sous Windows, exécutez d'abord
os.system('color')
Puisqu'il émet des codes ANSI, fonctionne-t-il sous Windows (consoles DOS) si ansi.sys est chargé ? support.microsoft.com/kb/101875
La réponse est Colorama pour toutes les colorations multiplateformes en Python.
Il prend en charge Python 3.5+ ainsi que Python 2.7.
Et à partir de janvier 2021, il est maintenu.
En tant qu'auteur de Colorama, merci pour la mention @nbv4. Je vais essayer de clarifier un peu : Colorama a pour but de permettre aux programmes Python d'imprimer du texte coloré pour terminal sur toutes les plateformes, en utilisant les mêmes codes ANSI que ceux décrits dans de nombreuses autres réponses sur cette page. Sous Windows, Colorama retire ces caractères ANSI de stdout et les convertit en appels win32 équivalents pour du texte coloré. Sur les autres plateformes, Colorama ne fait rien. Ainsi, vous pouvez utiliser des codes ANSI, ou des modules comme Termcolor, et avec Colorama, ils "fonctionnent" sur toutes les plateformes. C'est l'idée, en tout cas.
Jonathan, c'est vraiment une bibliothèque géniale ! La possibilité de colorer la sortie Python sur plusieurs plateformes est vraiment très agréable et utile. Je fournis des outils pour une bibliothèque qui colorie sa propre console. Je peux rediriger la sortie de cette console vers le terminal et coloriser la sortie. Maintenant, je peux même monter la bibliothèque et laisser l'utilisateur choisir les couleurs. Cela permettra aux daltoniens de régler les choses pour qu'ils puissent voir la sortie correctement. Merci
Cela devrait être dans la bibliothèque standard... Le support des couleurs sur plusieurs plateformes est important, je pense.
Vous voulez apprendre les séquences d'échappement ANSI. Voici un bref exemple :
CSI = "\x1B["
print(CSI+"31;40m" + "Colored Text" + CSI + "0m")
Pour plus d'informations, voir _Code d'échappement ANSI_ .
Pour un caractère de bloc, essayez un caractère Unicode comme \u2588 :
print(u"\u2588")
Tout mettre en place :
print(CSI+"31;40m" + u"\u2588" + CSI + "0m")
Essayez def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
puis print ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Ma façon préférée est avec le Bénédictions (pour toute révél révélation : c'est moi qui l'ai écrite). Par exemple :
from blessings import Terminal
t = Terminal()
print t.red('This is red.')
print t.bold_bright_red_on_black('Bright red on black')
Pour imprimer des briques colorées, le moyen le plus fiable est d'imprimer des espaces avec des couleurs de fond. J'utilise cette technique pour dessiner la barre de progression dans nez-progressif :
print t.on_green(' ')
Vous pouvez également imprimer à des endroits spécifiques :
with t.location(0, 5):
print t.on_yellow(' ')
Si vous devez modifier les capacités d'autres terminaux au cours de votre jeu, vous pouvez également le faire. Vous pouvez utiliser le formatage standard des chaînes de caractères de Python pour que le jeu reste lisible :
print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t)
Ce qui est bien avec Blessings, c'est qu'il fait de son mieux pour fonctionner sur toutes sortes de terminaux, et pas seulement sur les terminaux de couleur ANSI (très répandus). Il évite également les séquences d'échappement illisibles dans votre code tout en restant concis à utiliser. Amusez-vous bien !
Mettre la couleur comme un nom de fonction et non comme un paramètre est une pratique discutable.
@LtWorf : vous pourriez facilement en faire un paramètre en utilisant getattr
si vous en avez besoin. Ou, plus vraisemblablement, créez simplement la chaîne de format de manière dynamique à la place.
@LtWorf : pourquoi ? Les fonctions et méthodes de Python sont des citoyens de première classe.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
10 votes
Vous devriez spécifier quelques informations supplémentaires afin d'obtenir de meilleures réponses : multiplateforme ? les modules externes sont-ils acceptés ?
3 votes
IPython le fait, multiplateforme. Vous voyez ce qu'ils utilisent ?
1 votes
Ce symbole ferait un super bloc coloré : Le seul problème est qu'il s'agit d'un ASCII étendu, vous pourriez peut-être le faire fonctionner en utilisant
http://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
1 votes
Certains terminaux peuvent également afficher des caractères Unicode. Si c'est le cas pour votre terminal, les caractères possibles sont presque illimités.
9 votes
Cette réponse est arrivée assez tard, mais elle me semble être la meilleure... celles qui ont été votées avant elle nécessitent des bidouillages spéciaux pour Windows alors que celle-ci fonctionne tout simplement : stackoverflow.com/a/3332860/901641
0 votes
Exécuter
pip install ipython
et ajouteralias python="ipython"
à votre shell de démarrage script (par ex.~/.bashrc
pour le shell bash)0 votes
Et si stackoverflow.com/a/42528796/610569 en utilisant pypi.python.org/pypi/lazyme ? (avis de non-responsabilité : publicité éhontée)
0 votes
Toutes ces réponses perturbent la mise en forme du texte. Le désordre peut être vu en exécutant
python <yourscript>.py |cat -A
0 votes
Si vous ne souhaitez pas installer un paquet supplémentaire, suivez cette procédure nouvelle réponse .