Como posso produzir texto colorido para o terminal, em Python? Qual é o melhor símbolo Unicode para representar um bloco sólido?
python
unicode
terminal
ansi-colors
aboSamoor
fonte
fonte
█
O único problema é que ele é ASCII estendida, talvez você poderia fazê-lo funcionar usandohttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Respostas:
Isso depende um pouco da plataforma em que você está. A maneira mais comum de fazer isso é imprimindo seqüências de escape ANSI. Para um exemplo simples, aqui está um código python dos scripts de compilação do blender :
Para usar código como este, você pode fazer algo como
ou, com Python3.6 +:
Isso funcionará em unixes, incluindo OS X, linux e windows (desde que você use o ANSICON ou no Windows 10, desde que você ative a emulação VT100 ). Existem códigos ansi para definir a cor, mover o cursor e muito mais.
Se você vai se complicar com isso (e parece que você está escrevendo um jogo), deve procurar o módulo "maldições", que lida com muitas das partes complicadas disso para você. O Python Curses HowTO é uma boa introdução.
Se você não estiver usando ASCII estendido (ou seja, não estiver em um PC), ficará com os caracteres ascii abaixo de 127 e '#' ou '@' provavelmente é sua melhor aposta para um bloco. Se você pode garantir que seu terminal esteja usando um conjunto de caracteres estendidos ascii da IBM , você terá muito mais opções. Os caracteres 176, 177, 178 e 219 são os "caracteres de bloco".
Alguns programas modernos baseados em texto, como o "Dwarf Fortress", emulam o modo de texto em modo gráfico e usam imagens da fonte clássica do PC. Você pode encontrar alguns desses bitmaps que podem ser usados no Wiki do Dwarf Fortress (veja conjuntos de peças feitas pelo usuário ).
O Concurso de demonstração do modo de texto tem mais recursos para criar gráficos no modo de texto.
Hum ... acho que fiquei um pouco empolgado com essa resposta. No entanto, estou planejando um jogo épico de aventura baseado em texto. Boa sorte com o seu texto colorido!
fonte
tput
, como assim , uma vez que resulta em código mais portátil.disable
é quando você canaliza a saída para um arquivo; embora ferramentas comocat
possam suportar cores, geralmente é melhor não imprimir informações sobre cores em arquivos.import ctypes;
kernel32 = ctypes.WinDLL('kernel32');
hStdOut = kernel32.GetStdHandle(-11);
mode = ctypes.c_ulong();
kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode));
mode.value |= 4;
kernel32.SetConsoleMode(hStdOut, mode)
.Estou surpreso que ninguém tenha mencionado o módulo termcolor do Python . O uso é bem simples:
Ou no Python 3:
No entanto, pode não ser sofisticado o suficiente para a programação de jogos e os "blocos coloridos" que você deseja executar ...
fonte
termcolor.COLORS
fornece uma lista de coresos.system('color')
primeiro, as seqüências de escape ANSI começarão a funcionar.A resposta é Colorama para todas as cores de plataforma cruzada no Python.
Uma captura de tela de exemplo do Python 3.6:
fonte
<b>bold</b>
) para adicionar estilo ao terminal de textoImprima uma sequência que inicie uma cor / estilo, depois a sequência e termine a alteração de cor / estilo com
'\x1b[0m'
:Obtenha uma tabela de opções de formato para o texto do shell com o seguinte código:
Exemplo claro-escuro (completo)
Exemplo de luz escura (parcial)
fonte
Defina uma sequência que inicia uma cor e uma sequência que termina a cor e imprima o texto com a sequência inicial na frente e a sequência final no final.
Isso produz o seguinte em
bash
,urxvt
com um esquema de cores no estilo Zenburn:Através da experimentação, podemos obter mais cores:
Nota:
\33[5m
e\33[6m
estão piscando.Dessa forma, podemos criar uma coleção de cores:
Aqui está o código para gerar o teste:
fonte
\33[0m
ouCEND
acima.Você deseja aprender sobre seqüências de escape ANSI. Aqui está um breve exemplo:
Para mais informações, consulte http://en.wikipedia.org/wiki/ANSI_escape_code
Para um caractere de bloco, tente um caractere unicode como \ u2588:
Juntando tudo:
fonte
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
entãoprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Estou respondendo porque descobri uma maneira de usar códigos ANSI no Windows 10, para que você possa alterar a cor do texto sem nenhum módulo que não esteja incorporado:
A linha que faz esse trabalho é
os.system("")
ou qualquer outra chamada do sistema, que permite imprimir códigos ANSI no Terminal:Nota: Embora isso ofereça as mesmas opções que outras opções do Windows, o Windows não oferece suporte completo a códigos ANSI, mesmo com esse truque. Nem todas as cores da decoração do texto funcionam e todas as cores 'brilhantes' (códigos 90-97 e 100-107) exibem as mesmas cores normais (códigos 30-37 e 40-47)
Edit : Obrigado a @jl por encontrar um método ainda mais curto.
tl; dr : adicione
os.system("")
próximo ao topo do seu arquivo.Versão Python: 3.6.7
fonte
if sys.platform.lower() == "win32": os.system('color')
ainda mais, simplesmente substituindo-a por justos.system('')
. Nenhuma condição é necessária e o código é executado no Windows 10 e no Linux (quando eu testei). Como você pode ver, você não precisa fazer uma chamada de sistemacolor
. Chamadas paradir
,cd
,abcdef
, e apenas uma multa de trabalho string vazia (embora as cordas não vazias provavelmente vai imprimir saída que você não quer ver).Minha maneira favorita é com a biblioteca Bênçãos (divulgação completa: eu escrevi). Por exemplo:
Para imprimir tijolos coloridos, a maneira mais confiável é imprimir espaços com cores de fundo. Eu uso essa técnica para desenhar a barra de progresso no nariz progressivo :
Você também pode imprimir em locais específicos:
Se você precisar mexer com outros recursos do terminal durante o jogo, também poderá fazer isso. Você pode usar a formatação de string padrão do Python para mantê-lo legível:
O bom de Blessings é que ele faz o possível para trabalhar em todos os tipos de terminais, e não apenas nos (em grande parte comuns) de cores ANSI. Ele também mantém seqüências de escape ilegíveis fora do seu código, permanecendo conciso para uso. Diverta-se!
fonte
getattr
se necessário. Ou, mais provavelmente, basta criar a string de formato dinamicamente.can just pass
uma função python.sty é semelhante ao colorama, mas é menos detalhado, suporta 8 bits e 24 bits cores de (rgb), permite registrar seus próprios estilos, suporta muting, é realmente flexível, bem documentado e muito mais.
Exemplos:
impressões:
Demo:
fonte
gerou uma classe com todas as cores usando um loop for para iterar todas as combinações de cores até 100, depois escreveu uma classe com cores python. Copie e cole como quiser, GPLv2 por mim:
fonte
Experimente este código simples
fonte
No Windows, você pode usar o módulo 'win32console' (disponível em algumas distribuições Python) ou o módulo 'ctypes' (Python 2.5 e superior) para acessar a API do Win32.
Para ver o código completo compatível com os dois lados, consulte o código de relatório do console de cores do Testoob .
exemplo de ctypes:
fonte
Estupidamente simples com base na resposta de @ joeld
Então apenas
fonte
print
substituições ? Objeção revogada.print
se deve ter certeza de replicar adequadamente sua funcionalidade.def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)
</ code>Coloquei a resposta @joeld em um módulo com funções globais que posso usar em qualquer lugar do meu código.
arquivo: log.py
use da seguinte maneira:
fonte
No Windows, você não pode imprimir no console com cores, a menos que esteja usando o win32api.
Para Linux, é tão simples quanto usar print, com as seqüências de escape descritas aqui:
Cores
Para que o personagem seja impresso como uma caixa, isso realmente depende da fonte que você está usando na janela do console. O símbolo da libra funciona bem, mas depende da fonte:
fonte
fonte
Acabei fazendo isso, achei que era mais limpo:
fonte
Com base na resposta @joeld, use https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Captura de tela:
Algumas atualizações para os
color_print
novos formatadores, por exemplo:Nota:
italic
,fast blinking
estrikethrough
pode não funcionar em todos os terminais, não funciona em Mac / Ubuntu.Por exemplo
Captura de tela:
fonte
Experimente on-line
fonte
observe como a
with
palavra - chave combina com modificadores como esses que precisam ser redefinidos (usando Python 3 e Colorama):fonte
print(Style.BRIGHT + "Header Test")
eprint (Style.DIM + word)
para criar um prompt muito bom.contextlib
para o Py3.@contextlib.contextmanager
decorador, não?Você pode usar a implementação Python da biblioteca de maldições: http://docs.python.org/library/curses.html
Além disso, execute isso e você encontrará sua caixa:
fonte
Você poderia usar o CLINT:
Obtê-lo no GitHub .
fonte
Eu sei que estou atrasado. Mas, eu tenho uma biblioteca chamada ColorIt . É super simples.
aqui estão alguns exemplos:
Isso lhe dá:
Também é importante notar que esta é uma plataforma cruzada e foi testada em mac, linux e windows.
Você pode tentar: https://github.com/CodeForeverAndEver/ColorIt
Nota: Piscando, itálico, negrito etc. serão adicionados em alguns dias.
fonte
Se você está programando um jogo, talvez queira mudar a cor de fundo e usar apenas espaços? Por exemplo:
fonte
Se você estiver usando o Windows, aqui está você!
fonte
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
Se você estiver usando Django
instantâneo:
(Eu geralmente uso saída colorida para depuração no terminal runserver, então a adicionei.)
Você pode testar se está instalado em sua máquina:
$ python -c "import django; print django.VERSION"
Para instalá-lo, verifique: Como instalar o Django
De uma chance!!
fonte
Aqui está um exemplo de maldições:
fonte
https://raw.github.com/fabric/fabric/master/fabric/colors.py
fonte
o asciimatics fornece um suporte portátil para criar UI de texto e animações:
Asciicast:
fonte
Ainda outro módulo pypi que envolve a função de impressão python 3:
https://pypi.python.org/pypi/colorprint
É utilizável no python 2.x se você também
from __future__ import print
. Aqui está um exemplo do python 2 da página modules pypi:Resultados "Olá, mundo!" com as palavras em azul e o ponto de exclamação em negrito vermelho e piscando.
fonte