Spausdinimas terminaluose su gėlėmis?

Kaip galiu rodyti spalvinį tekstą Python terminale? Kas yra geriausias Unicode simbolis, kuris atspindi tvirtą bloką?

1668 m
13 нояб. nustatė aboSamoor lapkričio 13 d 2008-11-13 21:58 '08, 21:58, 2008-11-13 21:58
@ 40 atsakymų
  • 1
  • 2

Tai priklauso nuo platformos, kurioje esate. Dažniausias būdas tai padaryti yra spausdinti ANSI evakuacijos sekas. Paprastas pavyzdys - tai „python“ kodas iš blenderio kūrimo scenarijų :

 class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' 

Norėdami naudoti tokį kodą, galite padaryti kažką panašaus

 print bcolors.WARNING + "Warning: No active frommets remain. Continue?" + bcolors.ENDC 

Jis veiks su „Unix“, įskaitant „OS X“, „Linux“ ir „Windows“ (su sąlyga, kad naudojate „ ANSICON“ arba „Windows 10“, jei įgalinsite VT100 emuliavimą ). Spalvų reguliavimui, žymeklio judėjimui ir kt.

Jei ketinate tai padaryti sudėtinga (ir tai skamba kaip jūs, jei rašote žaidimą), turėtumėte pažvelgti į „prakeikimo“ modulį, kuris tvarko daugelį sudėtingų jo dalių. Python Curses HowTO yra geras įvadas.

Jei nenaudojate išplėstinio ASCII (t. Y. Ne asmeniniame kompiuteryje), esate užstrigę su ascii simboliais žemiau 127, o „#“ arba „@“ tikriausiai yra geriausias pasirinkimas blokui. Jei galite įsitikinti, kad jūsų terminalas naudoja IBM išplėstą ascii simbolių rinkinį , turite daug daugiau galimybių. 176, 177, 178 ir 219 simboliai yra „blokiniai simboliai“.

Kai kurios modernios teksto programos, pvz., „Dwarven Fortress“, imituoja teksto režimą grafiniu režimu ir naudojasi klasikinio PC šrifto vaizdais. Jūs galite rasti keletą šių bitų žemėlapių, kuriuos galite naudoti Nykštukinės tvirtovės Wiki ( pasirinktinės plytelės ).

Teksto režimo demonstravimo konkursas turi daugiau išteklių teksto režimo grafikai atlikti.

Hmm .. Manau, kad šis atsakymas šiek tiek nustumtas. Tačiau planuoju epinį teksto nuotykių žaidimą. Sėkmės jums spalvotu tekstu!

1455
13 нояб. lapkričio 13 d 2008-11-13 22:25 '08, 10:25 pm, 2008-11-13 22:25

Esu nustebęs, kad niekas paminėjo Python termometro modulį . Naudojimas yra gana paprastas:

 from termcolor import colored print colored('hello', 'red'), colored('world', 'green') 

Arba „Python 3“:

border=0
 print(colored('hello', 'red'), colored('world', 'green')) 

Tačiau gali būti nepakankamai sudėtinga programuoti žaidimus ir „spalvotus blokus“, kuriuos norite padaryti ...

623
16 нояб. atsakymas pateikiamas Samat Jain . 2008-11-16 10:31 '08, 10:31 am 2008-11-16 10:31

Atsakymas yra „ Colorama “ visoms „Python“ platformoms skirtoms spalvoms .

Python 3,6 ekrano kopijos pavyzdys: 2019

26 июля '10 в 10:07 2010-07-26 10:07 atsakymas duotas kunigui liepos 26 d., 10 val. 10:07 2010-07-26 10:07

Spausdinkite eilutę, pradedančią spalvą / stilių, tada eilutę, tada '\x1b[0m' spalvos / stiliaus pakeitimą '\x1b[0m' :

 print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m') 

2019

14 февр. atsakymą pateikė rabin utam 14 vasaris. 2014-02-14 20:56 '14 at 20:56 2014-02-14 20:56

Nustatykite liniją, kuri pradeda spalvą ir liniją, kuri baigia spalvą, ir tada išspausdina tekstą pradine linija eilutės pradžioje ir pabaigoje.

104
12 сент. atsakymas pateikiamas qubodup 12 sep . 2016-09-12 17:00 „16, 17 val. 2016-09-12 17:00

Norite sužinoti apie ANSI evakuacijos sekas. Štai trumpas pavyzdys:

 CSI="\x1B[" print CSI+"31;40m" + "Colored Text" + CSI + "0m" 

Norėdami gauti daugiau informacijos, žr. Http://en.wikipedia.org/wiki/ANSI_escape_code

Jei norite užblokuoti simbolį, pabandykite naudoti Unicode simbolį, pvz., \ T

 print u"\u2588" 

Visa tai derinant:

 print CSI+"31;40m" + u"\u2588" + CSI + "0m" 
75
13 нояб. Atsakymą pateikė Bryan Oakley lapkričio 13 d 2008-11-13 22:22 '08 10:22 pm 2008-11-13 22:22

Mano mėgstamiausias būdas yra su palaiminimų biblioteka (pilnas atskleidimas: parašiau). Pavyzdžiui:

 from blessings import Terminal t = Terminal() print t.red('This is red.') print t.bold_bright_red_on_black('Bright red on black') 

Norėdami spausdinti spalvotas plytas, patikimiausias būdas yra atspausdinti fono spalvas. Naudoju šį metodą, norint padaryti progreso juostą į nosį progresuojančią :

 print t.on_green(' ') 

Taip pat galite įvesti tam tikras vietas:

 with t.location(0, 5): print t.on_yellow(' ') 

Jei žaidimo metu turite atspėti su kitomis terminalo funkcijomis, galite tai padaryti. Jei norite skaityti, galite naudoti standartinį „Python“ eilutės formatavimą:

 print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t) 

Geras dalykas dėl palaiminimo yra tai, kad jis deda visas pastangas, kad dirbtų visais terminais, o ne tik (dažniausiai) ANSI spalva. Jis taip pat išsaugo nesuprantamas atkūrimo sekas iš savo kodo ir išsaugo trumpą naudojimą. Smagiai!

58
18 дек. Atsakymą pateikė Erik Rose 18 d. 2011-12-18 03:32 '11 at 3:32 2011-12-18 03:32

sukūrė klasę su visomis spalvomis, naudodama „for loop“, kad kartotumėte kiekvieną spalvų derinį iki 100, ir tada parašė klasę su python spalvomis. Kopijuokite ir įklijuokite, kaip ir jūs, GPLv2:

 class colors: '''Colors class: reset all colors with colors.reset two subclasses fg for foreground and bg for background. use as colors.subclass.colorname. ie colors.fg.red or colors.bg.green also, the generic bold, disable, underline, reverse, strikethrough, and invisible work with the main class ie colors.bold ''' reset='\033[0m' bold='\033[01m' disable='\033[02m' underline='\033[04m' reverse='\033[07m' strikethrough='\033[09m' invisible='\033[08m' class fg: black='\033[30m' red='\033[31m' green='\033[32m' orange='\033[33m' blue='\033[34m' purple='\033[35m' cyan='\033[36m' lightgrey='\033[37m' darkgrey='\033[90m' lightred='\033[91m' lightgreen='\033[92m' yellow='\033[93m' lightblue='\033[94m' pink='\033[95m' lightcyan='\033[96m' class bg: black='\033[40m' red='\033[41m' green='\033[42m' orange='\033[43m' blue='\033[44m' purple='\033[45m' cyan='\033[46m' lightgrey='\033[47m' 
45
19 окт. spalio 19 d. atsakymą pateikė GI Jack . 2014-10-19 02:26 '14, 2:26 am 2014-10-19 02:26

Išbandykite šį paprastą kodą.

 def prRed(prt): print("\033[91m {}\033[00m" .format(prt)) def prGreen(prt): print("\033[92m {}\033[00m" .format(prt)) def prYellow(prt): print("\033[93m {}\033[00m" .format(prt)) def prLightPurple(prt): print("\033[94m {}\033[00m" .format(prt)) def prPurple(prt): print("\033[95m {}\033[00m" .format(prt)) def prCyan(prt): print("\033[96m {}\033[00m" .format(prt)) def prLightGray(prt): print("\033[97m {}\033[00m" .format(prt)) def prBlack(prt): print("\033[98m {}\033[00m" .format(prt)) prGreen("Hello world") 
39
23 дек. atsakymas duotas dieną89 23 d. 2015-12-23 23:20 '15, 11:20 val. 2015-12-23 23:20

Stilius yra panašus į spalvą, tačiau jis yra mažesnis, palaiko 8 bitų ir 24 bitų (rgb) spalvas, leidžia registruoti savo spalvas, yra labai lankstus ir gerai dokumentuotas. Jei jums nereikia suderinamumo su terminalo emuliatoriais, kurie įstrigo 90-aisiais ir norėtumėte naudoti naujas funkcijas, galite pabandyti.

27
10 февр. Atsakymas pateikiamas Rotareti 10 vasario mėn. 2018-02-10 20:04 '18, 08:04 val. 2018-02-10 20:04

„Windows“ sistemoje galite naudoti Win32console modulį (prieinamą kai kuriuose „Python“ paskirstymuose) arba „Ctypes“ modulį („Python 2.5“ ir naujesnė versija), kad galėtumėte pasiekti „Win32 API“.

Jei norite pamatyti visą kodą, kuris palaiko abu, žr. „ Testoob“ spalvų konsolės ataskaitos kodą .

Pavyzdys

tipai:

 import ctypes # Constants from the Windows API STD_OUTPUT_HANDLE = -11 FOREGROUND_RED = 0x0004 # text color contains red. def get_csbi_attributes(handle): # Based on IPython winconsole.py, written by Alexander Belchenko import struct csbi = ctypes.create_string_buffer(22) res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi) assert res (bufx, bufy, curx, cury, wattr, left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw) return wattr handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) reset = get_csbi_attributes(handle) ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_RED) print "Cherry on top" ctypes.windll.kernel32.SetConsoleTextAttribute(handle, reset) 
26
14 нояб. atsakymas pateiktas orip 14 lapkričio. 2008-11-14 01:22 '08 1:22 am 2008-11-14 01:22

Kvailai paprasta, remiantis atsakymu @joeld

 class PrintInColor: RED = '\033[91m' GREEN = '\033[92m' YELLOW = '\033[93m' LIGHT_PURPLE = '\033[94m' PURPLE = '\033[95m' END = '\033[0m' @classmethod def red(cls, s, **kwargs): print(cls.RED + s + cls.END, **kwargs) @classmethod def green(cls, s, **kwargs): print(cls.GREEN + s + cls.END, **kwargs) @classmethod def yellow(cls, s, **kwargs): print(cls.YELLOW + s + cls.END, **kwargs) @classmethod def lightPurple(cls, s, **kwargs): print(cls.LIGHT_PURPLE + s + cls.END, **kwargs) @classmethod def purple(cls, s, **kwargs): print(cls.PURPLE + s + cls.END, **kwargs) 

Tada tiesiog

 PrintInColor.red('hello', end=' ') PrintInColor.green('world') 
21
19 апр. Atsakymas pateikiamas zahanm 19 Bal 2015-04-19 01:18 '15 ne 1:18 2015-04-19 01:18

„@Joeld“ atsakymą supakavau modulyje su visuotinėmis funkcijomis, kurias galiu naudoti bet kurioje kodo vietoje.

failas: log.py

 HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = "\033[1m" def disable(): HEADER = '' OKBLUE = '' OKGREEN = '' WARNING = '' FAIL = '' ENDC = '' def infog( msg): print OKGREEN + msg + ENDC def info( msg): print OKBLUE + msg + ENDC def warn( msg): print WARNING + msg + ENDC def err( msg): print FAIL + msg + ENDC 

naudoti šiuos veiksmus:

  import log log.info("Hello World") log.err("System Error") 
20
12 июня '13 в 14:38 2013-06-12 14:38 atsakymą Mohamed Samy pateikė birželio 12 d. 13 val. 14:38. 2013-06-12 14:38

Remiantis @joeld atsakymu, naudokite https://pypi.python.org/pypi/lazyme pip install -U lazyme :

 from lazyme.string import color_print >>> color_print('abc') abc >>> color_print('abc', color='pink') abc >>> color_print('abc', color='red') abc >>> color_print('abc', color='yellow') abc >>> color_print('abc', color='green') abc >>> color_print('abc', color='blue', underline=True) abc >>> color_print('abc', color='blue', underline=True, bold=True) abc >>> color_print('abc', color='pink', underline=True, bold=True) abc 

Ekranas:

2019

Python spalvų spausdinimo terminalams naudoju spalvų modulį. Nuoroda čia yra http://pypi.python.org/pypi/colorama

Raudonos ir žalios spalvos teksto spausdinimo pavyzdys:

 from colorama import * print(Fore.GREEN + 'Green text') print(Fore.RED + 'Red text') 

Aš parašiau pagrindinę Matrix programą.

Diegimas „Ubuntu“ (jūsų paskirstymo diegimo komanda gali skirtis)

 sudo apt-get install python-pip sudo pip install colorama 
17
13 сент. Johnny atsakymas, pateiktas rugsėjo 13 d 2013-09-13 15:24 '13, 15:24, 2013-09-13 15:24

„Windows“ sistemoje negalima spausdinti į konsolę su spalvomis, nebent naudojate Win32api.

Linux sistemoje tai yra taip paprasta, kaip naudojant spausdinimą, čia aprašytos evakuacijos sekos:

Spalvos

Kad simbolis būtų spausdinamas kaip laukas, tai tikrai priklauso nuo to, kokį šriftą naudojate konsolės >

 # 
17
13 нояб. atsakymą pateikė UberJumper lapkričio 13 d 2008-11-13 22:06 '08 10:06 val. 2008-11-13 22:06

naudoja ANSI

 RED = '\033[91m' GREEN = '\033[92m' YELLOW = '\033[93m' LIGHT_PURPLE = '\033[94m' PURPLE = '\033[95m' END = '\033[0m' 

Padarykite savo funkciją: -

 def red(name): print ("\033[91m {}\033[00m" .format(name)) 

Skambinimo funkcija: -

raudonas („Geras“) Geras <- Jis spausdins raudonai,

Pastaba: - nereikia modulio

16
01 июня '15 в 5:36 2015-06-01 05:36 atsakymą RKasnees pateikė birželio 15 d. 15 val. 5:36 2015-06-01 05:36

Baigiau, pajutau, kad tai švariausias:

 formatters = { 'RED': '\033[91m', 'GREEN': '\033[92m', 'END': '\033[0m', } print 'Master is currently {RED}red{END}!'.format(**formatters) print 'Help make master {GREEN}green{END} again!'.format(**formatters) 
15
17 авг. atsakymas duotas Ben174 17 rug . 2016-08-17 23:01 '16 at 11:01 PM 2016-08-17 23:01

Atkreipkite dėmesį, kaip gerai su raktiniais žodžiais yra sumaišyti su tokiais modifikatoriais, kurie turėtų būti iš naujo nustatyti (naudojant „Python 3“ ir „Colorama“):

 from colorama import Fore, Style import sys class Highlight: def __init__(self, clazz, color): self.color = color self.clazz = clazz def __enter__(self): print(self.color, end="") def __exit__(self, type, value, traceback): if self.clazz == Fore: print(Fore.RESET, end="") else: assert self.clazz == Style print(Style.RESET_ALL, end="") sys.stdout.flush() with Highlight(Fore, Fore.GREEN): print("this is highlighted") print("this is not") 
15
01 июля '12 в 3:41 2012-07-01 03:41 atsakymą pateikė Janus Troelsen liepos 12 d. 12 val. 2012-07-01 03:41

Galite naudoti CLINT:

 from clint.textui import colored print colored.red('some warning message') print colored.green('nicely done!') 

Gauti jį iš github .

15
08 янв. Giacomo Lacavos atsakymas apie 08 m 2012-01-08 04:40 '12 at 4:40 2012-01-08 04:40

Galite naudoti perkėlimų bibliotekos „Pyses“ įgyvendinimą: http://docs.python.org/library/curses.html

Taip pat paleiskite šį >

 for i in range(255): print i, chr(i) 
15
13 нояб. atsakymas pateikiamas 13 d 2008-11-13 22:13 '08 10:13 val. 2008-11-13 22:13

asciimatics teikia nešiojamą paramą teksto sąsajų ir animacijų kūrimui:

 #!/usr/bin/env python from asciimatics.effects import RandomNoise # $ pip install asciimatics from asciimatics.renderers import SpeechBubble, Rainbow from asciimatics.scene import Scene from asciimatics.screen import Screen from asciimatics.exceptions import ResizeScreenError def demo(screen): render = Rainbow(screen, SpeechBubble('Rainbow')) effects = [RandomNoise(screen, signal=render)] screen.play([Scene(effects, -1)], stop_on_resize=True) while True: try: Screen.wrapper(demo) break except ResizeScreenError: pass 

Asciicast:

10
05 мая '16 в 16:08 2016-05-05 16:08 atsakymą pateikė jfs 05 gegužės 16 d. 16:08 2016-05-05 16:08

Jei programuojate žaidimą, galbūt norite pakeisti fono spalvą ir naudoti tik tarpas? Pavyzdžiui:

 print " "+ "\033[01;41m" + " " +"\033[01;46m" + " " + "\033[01;42m" 
10
13 нояб. atsakymas pateikiamas suhib-alsisan, lapkričio 13 d. 2008-11-13 22:38 '08, 10:38 val. 2008-11-13 22:38

Čia yra pavyzdys, kaip prakeikimas:

 import curses def main(stdscr): stdscr.clear() if curses.has_colors(): for i in xrange(1, curses.COLORS): curses.init_pair(i, i, curses.COLOR_BLACK) stdscr.addstr("COLOR %d! " % i, curses.color_pair(i)) stdscr.addstr("BOLD! ", curses.color_pair(i) | curses.A_BOLD) stdscr.addstr("STANDOUT! ", curses.color_pair(i) | curses.A_STANDOUT) stdscr.addstr("UNDERLINE! ", curses.color_pair(i) | curses.A_UNDERLINE) stdscr.addstr("BLINK! ", curses.color_pair(i) | curses.A_BLINK) stdscr.addstr("DIM! ", curses.color_pair(i) | curses.A_DIM) stdscr.addstr("REVERSE! ", curses.color_pair(i) | curses.A_REVERSE) stdscr.refresh() stdscr.getch() if __name__ == '__main__': print "init..." curses.wrapper(main) 
9
02 июля '09 в 14:59 2009-07-02 14:59 atsakymas pateikiamas nosklo 02 liepos 09 d. 14:59 2009-07-02 14:59

Taip! kita versija

kol aš rasiu tai naudinga, aš ją šiek tiek pakeitiau. šis „ github“ turinys yra rezultatas

Naudojimas

 print colors.draw("i'm yellow", bold=True, fg_yellow=True) 

2019

9
08 февр. Atsakymą pateikė Jossef Harush 08 vasaris. 2015-02-08 01:43 '15 at 1:43 2015-02-08 01:43

Kitas pypi modulis, apgaubiantis 3 python spausdinimo funkciją:

https://pypi.python.org/pypi/colorprint

Jis gali būti naudojamas „python“ 2.x sistemoje, jei taip pat esate „ from __future__ import print . Čia yra python 2 iš pypi modulių pavyzdys:

 from __future__ import print_function from colorprint import * print('Hello', 'world', color='blue', end='', sep=', ') print('!', color='red', format=['bold', 'blink']) 

Išvada „Sveikas pasaulis!“ su mėlynu žodžiu ir šauktuku, paryškintu raudonu ir mirksi.

9
09 июля '15 в 9:58 2015-07-09 09:58 atsakymas duotas drevicko liepos 09 '15 , 9:58 2015-07-09 09:58

https://raw.github.com/fabric/fabric/master/fabric/colors.py

 """ .. versionadded:: 0.9.2 Functions for wrapping strings in ANSI color codes. Each function within this module returns the input string ``text``, wrapped with ANSI color codes for the appropriate color. For example, to print some text as green on supporting terminals:: from fabric.colors import green print(green("This text is green!")) Because these functions simply return modified strings, you can nest them:: from fabric.colors import red, green print(red("This sentence is red, except for " + \ green("these words, which are green") + ".")) If ``bold`` is set to ``True``, the ANSI flag for bolding will be flipped on for that particular invocation, which usually shows up as a bold or brighter version of the original color on most terminals. """ def _wrap_with(code): def inner(text, bold=False): c = code if bold: c = "1;%s" % c return "\033[%sm%s\033[0m" % (c, text) return inner red = _wrap_with('31') green = _wrap_with('32') yellow = _wrap_with('33') blue = _wrap_with('34') magenta = _wrap_with('35') cyan = _wrap_with('36') white = _wrap_with('37') 
9
27 марта '13 в 0:15 2013-03-27 00:15 atsakymą pateikė „ Vishal“ kovo 27 d. 13 d. 0:15 2013-03-27 00:15

Jei naudojate „Windows“, tada eikite čia!

 # display text on a Windows console # Windows XP with Python27 or Python32 from ctypes import windll # needed for Python2/Python3 diff try: input = raw_input except: pass STD_OUTPUT_HANDLE = -11 stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) # look at the output and select the color you want # for instance hex E is yellow on black # hex 1E is yellow on blue # hex 2E is yellow on green and so on for color in range(0, 75): windll.kernel32.SetConsoleTextAttribute(stdout_handle, color) print("%X --> %s" % (color, "Have a fine day!")) input("Press Enter to go on ... ") 
8
25 июня '12 в 19:59 2012-06-25 19:59 atsakymas pateikiamas „ Navweb“ birželio 12 d., 12 val. 19:59 2012-06-25 19:59

Jei naudojate Django

 >>> from django.utils.termcolors import colorize >>> print colorize("Hello World!", fg="blue", bg='red', ... opts=('bold', 'blink', 'underscore',)) Hello World! >>> help(colorize) 

momentinė nuotrauka:

2019

7
22 апр. Grijesh Chauhan atsakymas, pateiktas balandžio 22 d 2015-04-22 22:00 „15, 10 val. 2015-04-22 22:00

Vienas paprastas variantas būtų naudoti cprint funkciją iš termcolor paketo.

2019

21 мая '18 в 13:59 2018-05-21 13:59 atsakymą pateikė kmario23, gegužės 21 d., 18 val., 15:59, 2018-05-21, 13:59
  • 1
  • 2

Kiti klausimai apie žymes arba Užduoti klausimą