2017-09-24 3 views
-1

Python 3.7, sous Windows, l'impression ne fonctionne pas comme prévu pour les codes de couleurs ANSI jusqu'à ce que shell = True une fois dans subprocess.call().Codes de couleur ANSI Python

Dans les liens ci-dessous, il semble impliquer que les codes de couleurs ANSI devraient fonctionner en utilisant la commande "print" sortie de la boîte.

How to print colour/color in python? Print in terminal with colors using Python?

le second mentionne l'émulation VT100 ... pas sûr de ce que cela signifie exactement. Je suis capable d'écrire un fichier batch qui affiche bien la couleur, donc je pense (naïvement) que ça devrait fonctionner de la même façon en Python.

Cependant, je ne suis pas en mesure d'utiliser les codes couleurs ANSI comme il semble que le caractère ESC est « commenté » (?) Parce que, par exemple, quand je

print(u"\u001b[31mHelloWorld") 

Je ne suis pas en mesure de voir la sortie colorée, comme le caractère ESC semble être nécessaire dans Windows et imprime dans le shell python comme "[?]" (une boîte avec un point d'interrogation)

Y at-il quelque chose qui me manque ici?

Répondre

0

Je me suis trouvé une réponse. Comme cela arrive souvent, je n'ai pas regardé assez loin.

le module Colorama peut être installé avec

py -m pip install colorama

et est livré avec une définition de méthode à la base du module appelé init

colorama.init()

Ceci est une fonction multi-plateforme en qu'il n'est utile que sur Windows (il enregistre l'état du Terminal actif pour inversion et écrit le Terminal pour pré-traiter les codes ANSI), il ne fait rien ou d'autres systèmes d'exploitation.

Je pense à implémenter une solution encore plus légère en utilisant ctypes et en définissant moi-même les indicateurs Interpret sur le terminal actif.

Si vous êtes intéressé à plus d'informations, voir ici:

https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

séquences de sortie Les séquences terminales suivantes sont interceptées par l'hôte de la console lors de l'écriture dans le flux de sortie, si le ENABLE_VIRTUAL_TERMINAL_PROCESSING L'indicateur est défini sur le handle de tampon d'écran à l'aide de l'indicateur SetConsoleMode. Notez que l'indicateur DISABLE_NEWLINE_AUTO_RETURN peut également être utile pour émuler le positionnement du curseur et le comportement de défilement des autres émulateurs de terminal par rapport aux caractères écrits dans la dernière colonne de n'importe quelle ligne.

Emphasis mine.