सवाल रंगों के साथ टर्मिनल में प्रिंट करें?


मैं पाइथन में टर्मिनल पर रंगीन पाठ कैसे आउटपुट कर सकता हूं? एक ठोस ब्लॉक का प्रतिनिधित्व करने के लिए सबसे अच्छा यूनिकोड प्रतीक क्या है?


1520
2017-11-13 18:58


मूल


बेहतर प्रतिक्रिया प्राप्त करने के लिए आपको कुछ अतिरिक्त जानकारी निर्दिष्ट करनी चाहिए: मल्टीप्लेटफार्म? बाहरी मॉड्यूल स्वीकार कर रहे हैं? - sorin
आईपीथन यह करता है, क्रॉस प्लेटफार्म। देखें कि वे क्या उपयोग करते हैं? - endolith
यह प्रतीक एक महान रंगीन ब्लॉक बना देगा: █   केवल समस्या यह है कि इसे एएससीआईआईआई बढ़ाया गया है, हो सकता है कि आप इसे इस्तेमाल करने के लिए काम कर सकें http://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python - Samy Bencherif
कुछ टर्मिनलों भी यूनिकोड वर्ण प्रदर्शित कर सकते हैं। यदि यह आपके टर्मिनल के लिए सच है, तो संभव वर्ण लगभग असीमित हैं। - ayke
यह जवाब काफी देर से आया, लेकिन यह मेरे लिए सबसे अच्छा प्रतीत होता है ... इसके ऊपर मतदान किए गए लोगों को विंडोज के लिए विशेष हैक्स की आवश्यकता होती है जबकि यह सिर्फ काम करता है: stackoverflow.com/a/3332860/901641 - ArtOfWarfare


जवाब:


यह कुछ हद तक निर्भर करता है कि आप किस प्लेटफॉर्म पर हैं। ऐसा करने का सबसे आम तरीका एएनएसआई एस्केप अनुक्रमों को प्रिंट करना है। एक साधारण उदाहरण के लिए, यहां से कुछ पायथन कोड है ब्लेंडर स्क्रिप्ट निर्माण:

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'

इस तरह के कोड का उपयोग करने के लिए, आप कुछ ऐसा कर सकते हैं

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

यह ओएस एक्स, लिनक्स और विंडोज़ सहित यूनिक्स पर काम करेगा (बशर्ते आप उपयोग करें ANSICON, या विंडोज 10 में आप सक्षम करते हैं वीटी 100 अनुकरण)। रंग सेट करने, कर्सर को स्थानांतरित करने, आदि के लिए ansi कोड हैं।

यदि आप इसके साथ जटिल होने जा रहे हैं (और ऐसा लगता है जैसे आप एक गेम लिख रहे हैं), तो आपको "शाप" मॉड्यूल को देखना चाहिए, जो आपके लिए इसके जटिल भागों को संभालता है। पाइथन शर्ट हाउटो एक अच्छा परिचय है।

यदि आप विस्तारित ASCII (यानी पीसी पर नहीं) का उपयोग नहीं कर रहे हैं, तो आप 127 से नीचे एसीआईआई अक्षरों से फंस गए हैं, और '#' या '@' शायद ब्लॉक के लिए आपकी सबसे अच्छी शर्त है। यदि आप सुनिश्चित कर सकते हैं कि आपका टर्मिनल आईबीएम का उपयोग कर रहा है विस्तारित ascii चरित्र सेट, आपके पास कई और विकल्प हैं। अक्षर 176, 177, 178 और 21 9 "ब्लॉक वर्ण" हैं।

कुछ आधुनिक पाठ-आधारित कार्यक्रम, जैसे कि "बौने किले", ग्राफिकल मोड में टेक्स्ट मोड का अनुकरण करते हैं, और क्लासिक पीसी फ़ॉन्ट की छवियों का उपयोग करते हैं। आप इनमें से कुछ बिटमैप पा सकते हैं जिनका आप उपयोग कर सकते हैं बौना किले विकी देख (उपयोगकर्ता द्वारा निर्मित टाइल्ससेट)।

पाठ मोड डेमो प्रतियोगिता टेक्स्ट मोड में ग्राफिक्स करने के लिए अधिक संसाधन हैं।

हम्म .. मुझे लगता है कि इस जवाब पर थोड़ा दूर ले गया। हालांकि, मैं एक महाकाव्य पाठ-आधारित साहसिक खेल की योजना बनाने के बीच में हूं। अपने रंगीन पाठ के साथ शुभकामनाएँ!


1344
2017-11-13 19:25



क्या है disabled के लिए इस्तेमाल होता है? - cregox
@ कावासा यह मुझे लगता है कि यह किसी भी रंग का उपयोग करके मुद्रित सभी रंगों के लिए रंग अक्षम करने के लिए है bcolors उदाहरण। उदाहरण के लिए, आप एक बना सकते हैं bcolors उदाहरण के लिए और फिर अपने रंग वर्णों को मुद्रित करने के लिए उदाहरण के सदस्य चर का उपयोग करें, लेकिन फिर यदि आपने तय किया कि अब आप रंग नहीं चाहते हैं, तो आप कॉल कर सकते हैं disable पात्रों को प्रिंट करने से पहले और वे सिर्फ खाली तारों के रूप में प्रिंट करेंगे। - Steven Oxley
बस ध्यान दे रहा है: आप भी जोड़ सकते हैं BOLD = "\033[1m" यदि आप बोल्ड टेक्स्ट चाहते हैं (हेडर के लिए उपयोगी)। - crazy2be
लिनक्स पर, आप इसका उपयोग करना चाहेंगे tput, इस तरह चूंकि इसका परिणाम अधिक पोर्टेबल कोड में होता है। - Martin Ueding
@ कावासा: के लिए एक असली उपयोग केस disable जब आप आउटपुट को फ़ाइल में पाइप करते हैं; जबकि उपकरण की तरह cat रंगों का समर्थन कर सकते हैं, आमतौर पर फ़ाइलों को रंग जानकारी मुद्रित करना बेहतर होता है। - Sebastian Mach


मुझे आश्चर्य है कि किसी ने इसका उल्लेख नहीं किया है पायथन टर्मकलर मॉड्यूल। उपयोग बहुत आसान है:

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')

यह पर्याप्त परिष्कृत नहीं हो सकता है, हालांकि, गेम प्रोग्रामिंग और "रंगीन ब्लॉक" के लिए जो आप करना चाहते हैं ...


556
2017-11-16 07:31



क्या यह विंडोज पर काम करता है? - molasses
हाँ - विंडोज पर काम नहीं करता है ... - stiank81
चूंकि यह एएनएसआई कोड उत्सर्जित कर रहा है, क्या यह ansi.sys लोड होने पर विंडोज (डॉस कंसोल) पर काम करता है? support.microsoft.com/kb/101875 - Phil P
बस ध्यान दिया कि 13/01/2011 तक, यह अब एमआईटी लाइसेंस के तहत है - Alexander Tsepkov
इसमें unittests (colorama के विपरीत) नहीं है और 2011 से अद्यतन नहीं है - Janus Troelsen


उत्तर है Colorama पायथन में सभी क्रॉस-प्लेटफार्म रंग के लिए।

एक पायथन 3.6 उदाहरण स्क्रीनशॉट: example screenshot


482
2017-07-26 07:07



कोलोरामा के लेखक के रूप में, उल्लेख @ nbv4 के लिए धन्यवाद। मैं थोड़ी कोशिश करूँगा और स्पष्टीकरण दूंगा: रंगमामा का उद्देश्य पाइथन कार्यक्रमों को उसी पृष्ठ पर कई अन्य उत्तरों में वर्णित वही एएनएसआई कोड का उपयोग करके सभी प्लेटफार्मों पर रंगीन टर्मिनल टेक्स्ट प्रिंट करना है। विंडोज़ पर, कोलोरामा इन एएनएसआई अक्षरों को stdout से स्ट्रिप्स करता है और उन्हें रंगीन पाठ के लिए समकक्ष Win32 कॉल में परिवर्तित करता है। अन्य प्लेटफॉर्म पर, रंगमा कुछ भी नहीं करता है। इसलिए आप एएनएसआई कोड, या टर्मकलर जैसे मॉड्यूल और कोलोरामा के साथ उपयोग कर सकते हैं, वे सभी प्लेटफॉर्म पर 'बस काम करते हैं'। क्या यह विचार किसी भी तरह से है। - Jonathan Hartley
यदि आप विंडोज़ पर रंगीन आउटपुट चाहते हैं तो यह लाइब्रेरी जरूरी नहीं है! - leetNightshade
यह मानक पुस्तकालय में होना चाहिए ... मुझे लगता है कि क्रॉस प्लेटफॉर्म रंग समर्थन महत्वपूर्ण है। - daviewales
Colorama महान है! इसके अलावा एक नज़र डालें ansimarkup, जो रंगमार्ग पर बनाया गया है और आपको एक साधारण टैग-आधारित मार्कअप (उदा। <b>bold</b>) टर्मिनल पाठ में शैली जोड़ने के लिए - gvalkov
यह colorama.init () को कॉल किए बिना काम नहीं करता है। पक्ष में मत देना! - Smit Johnth


एक स्ट्रिंग मुद्रित करें जो रंग / शैली शुरू करता है, फिर स्ट्रिंग, फिर रंग / शैली परिवर्तन को समाप्त करें '\x1b[0m':

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

Success with green background example

निम्नलिखित कोड के साथ खोल पाठ के लिए प्रारूप विकल्पों की एक तालिका प्राप्त करें:

def print_format_table():
    """
    prints table of formatted text format options
    """
    for style in range(8):
        for fg in range(30,38):
            s1 = ''
            for bg in range(40,48):
                format = ';'.join([str(style), str(fg), str(bg)])
                s1 += '\x1b[%sm %s \x1b[0m' % (format, format)
            print(s1)
        print('\n')

print_format_table()

लाइट-ऑन-डार्क उदाहरण (पूर्ण)

enter image description here

डार्क-ऑन-लाइट उदाहरण (आंशिक)

top part of output


282
2018-02-14 17:56



यह अधिकांश गोले के साथ-साथ आईपीथॉन में भी काम करता है, जो अधिकांश अनुप्रयोगों के लिए पर्याप्त है - dashesy
क्या मैं पूछ सकता हूं, यह कौन सा टर्मिनल है? - FlipTack
यह पोर्टेबल कितना है? - Ruggero Turra
यह रास्पबेरी पीआई 2 पर काम करता है। धन्यवाद! :) - johnerfx
लघु स्टैंडअलोन कार्यान्वयन: gist.github.com/Sheljohn/68ca3be74139f66dbc6127784f638920 - Sheljohn


आप एएनएसआई से बचने के दृश्यों के बारे में जानना चाहते हैं। यहां एक संक्षिप्त उदाहरण दिया गया है:

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

अधिक जानकारी के लिए देखें http://en.wikipedia.org/wiki/ANSI_escape_code

ब्लॉक वर्ण के लिए, एक यूनिकोड वर्ण की कोशिश करें जैसे \ u2588:

print u"\u2588"

यह सब एक साथ डालें:

print CSI+"31;40m" + u"\u2588" + CSI + "0m"

71
2017-11-13 19:22



प्रयत्न def d(*v): return '\x1B['+';'.join(map(str, v))+'m' फिर print ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)]) - Evgeni Sergeev
यहां रीसेट करने का अर्थ क्या है? - MohitC
@ मोहित सी: वाह। नौ साल और आप नोटिस करने वाले पहले व्यक्ति हैं। यह एक गलती की तरह दिखता है। - Bryan Oakley


एक स्ट्रिंग को परिभाषित करें जो एक रंग और एक स्ट्रिंग जो रंग को समाप्त करता है, फिर अंत में स्टार्ट स्ट्रिंग के साथ अपने पाठ को प्रिंट करें और अंत में अंत स्ट्रिंग को प्रिंट करें।

CRED = '\033[91m'
CEND = '\033[0m'
print(CRED + "Error, does not compute!" + CEND)

यह निम्नलिखित में पैदा करता है bashमें urxvtजेनबर्न-शैली रंग योजना के साथ:

output colors

Experemintation के माध्यम से, हम और अधिक रंग प्राप्त कर सकते हैं:

color matrix

ध्यान दें: \33[5m तथा \33[6m झपकी कर रहे हैं

इस तरह हम एक पूर्ण रंग संग्रह बना सकते हैं:

CEND      = '\33[0m'
CBOLD     = '\33[1m'
CITALIC   = '\33[3m'
CURL      = '\33[4m'
CBLINK    = '\33[5m'
CBLINK2   = '\33[6m'
CSELECTED = '\33[7m'

CBLACK  = '\33[30m'
CRED    = '\33[31m'
CGREEN  = '\33[32m'
CYELLOW = '\33[33m'
CBLUE   = '\33[34m'
CVIOLET = '\33[35m'
CBEIGE  = '\33[36m'
CWHITE  = '\33[37m'

CBLACKBG  = '\33[40m'
CREDBG    = '\33[41m'
CGREENBG  = '\33[42m'
CYELLOWBG = '\33[43m'
CBLUEBG   = '\33[44m'
CVIOLETBG = '\33[45m'
CBEIGEBG  = '\33[46m'
CWHITEBG  = '\33[47m'

CGREY    = '\33[90m'
CRED2    = '\33[91m'
CGREEN2  = '\33[92m'
CYELLOW2 = '\33[93m'
CBLUE2   = '\33[94m'
CVIOLET2 = '\33[95m'
CBEIGE2  = '\33[96m'
CWHITE2  = '\33[97m'

CGREYBG    = '\33[100m'
CREDBG2    = '\33[101m'
CGREENBG2  = '\33[102m'
CYELLOWBG2 = '\33[103m'
CBLUEBG2   = '\33[104m'
CVIOLETBG2 = '\33[105m'
CBEIGEBG2  = '\33[106m'
CWHITEBG2  = '\33[107m'

परीक्षा उत्पन्न करने के लिए कोड यहां दिया गया है:

x = 0
for i in range(24):
  colors = ""
  for j in range(5):
    code = str(x+j)
    colors = colors + "\33[" + code + "m\\33[" + code + "m\033[0m "
  print(colors)
  x=x+5

69
2017-09-12 14:00



आपने txt झपकी कैसे बनाई? - WiLL_K
क्या खोल या टर्मिनल इसे झपकी देता है? - Zypps987
(यू) उदाहरण के लिए आरएक्सवीटी - qubodup
चमकते पाठ वास्तव में वास्तव में अच्छी तरह से काम करता है। हालांकि मैं इसे कैसे रोकूं? लगातार सभी प्रिंट कुछ कारणों से झपकी दे रहे हैं। मेरा टर्मिनल सोचता है कि यह पार्टी का समय है! - nouveau
स्ट्रिंग के अंत में झपकी लगाना, डाल दिया \33[0m, या CEND ऊपर। - Stiffy2000


मेरा पसंदीदा तरीका है आशीर्वाद का पुस्तकालय (पूर्ण प्रकटीकरण: मैंने इसे लिखा)। उदाहरण के लिए:

from blessings import Terminal

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

रंगीन ईंटों को मुद्रित करने के लिए, पृष्ठभूमि रंगों के साथ रिक्त स्थान मुद्रित करने का सबसे विश्वसनीय तरीका है। मैं प्रगति पट्टी को आकर्षित करने के लिए इस तकनीक का उपयोग करता हूं नाक-प्रगतिशील:

print t.on_green(' ')

आप विशिष्ट स्थानों में भी प्रिंट कर सकते हैं:

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

यदि आपको अपने गेम के दौरान अन्य टर्मिनल क्षमताओं के साथ मिलना है, तो आप भी ऐसा कर सकते हैं। आप इसे पठनीय रखने के लिए पायथन के मानक स्ट्रिंग स्वरूपण का उपयोग कर सकते हैं:

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

आशीर्वाद के बारे में अच्छी बात यह है कि यह सभी प्रकार के टर्मिनल पर काम करने के लिए सबसे अच्छा है, न कि केवल (भारी आम) एएनएसआई-रंग वाले। उपयोग करने के लिए संक्षेप में रहते हुए यह आपके कोड से अपठनीय भागने के दृश्य भी रखता है। मज़े करो!


59
2017-12-18 00:32



एक फंक्शन नाम के रूप में रंग डालना और पैरामीटर के रूप में नहीं एक संदिग्ध अभ्यास है। - LtWorf
आशीर्वाद महान है! मैं समझता हूं कि फ़ंक्शन का नाम रंग क्यों है और पैरामीटर भी नहीं। - Scalahansolo
@LtWorf: आप इसे आसानी से उपयोग कर पैरामीटर बना सकते हैं getattr यदि तुम्हें इसकी आवश्यकता है। या अधिक संभावना है, इसके बजाए गतिशील रूप से प्रारूप स्ट्रिंग बनाएं। - jfs
@LtWorf: क्यों? पायथन के कार्य और तरीके प्रथम श्रेणी के नागरिक हैं - progo
@progo तथ्य यह है कि आप ऐसा कर सकते हैं इसका मतलब यह नहीं है कि आपको यह करना चाहिए। यह रंग अधिक सामान्य है यदि रंग एक पैरामीटर है जिसे आप पास कर सकते हैं। - LtWorf


100 के रंग के प्रत्येक संयोजन को फिर से चलाने के लिए लूप के लिए सभी रंगों के साथ एक वर्ग उत्पन्न किया, फिर पाइथन रंगों के साथ एक कक्षा लिखी। जैसा कि आप करेंगे, कॉपी और पेस्ट करें, मेरे द्वारा जीपीएलवी 2:

class colors:
    '''Colors class:
    reset all colors with colors.reset
    two subclasses fg for foreground and bg for background.
    use as colors.subclass.colorname.
    i.e. colors.fg.red or colors.bg.green
    also, the generic bold, disable, underline, reverse, strikethrough,
    and invisible work with the main class
    i.e. 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'

41
2017-10-18 23:26