Красивая печать в командной строке windows - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь добавить цвета к моему оператору ввода в windows командной строке, используя библиотеку Clint.

from clint.textui import colored, puts,prompt

puts(colored.yellow("Hello!!!\n\n"))
user_number = prompt.query(str(colored.cyan('\nPlease enter something:\n')))

Я не могу понять, почему голубой цвет не отображается. Прилагается представление из командной строки. Спасибо!

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вот определение функции запроса в файле prompt.py из clint lib.

def query(prompt, default='', validators=None, batch=False):
    # Set the nonempty validator as default
    if validators is None:
        validators = [RegexValidator(r'.+')]

    # Let's build the prompt
    if prompt[-1] is not ' ':
        prompt += ' '

    if default:
        prompt += '[' + default + '] '

    # If input is not valid keep asking
    while True:
        # If batch option is True then auto reply
        # with default input
        if not batch:
            user_input = raw_input(prompt).strip() or default
        else:
            print(prompt)
            user_input = ''

        # Validate the user input
        try:
            for validator in validators:
                user_input = validator(user_input)
            return user_input
        except Exception as e:
            puts(yellow(e.message))

вы можете видеть, что вы не можете распечатать цветной текст, как вы пытаетесь достичь, поскольку он ожидает буквальную строку в качестве аргумента, мы можем изменить функцию запроса, чтобы она работала так, как ожидалось, вот так

from clint.textui import colored, puts, prompt, validators as validators_module
from re import match

prompt_colors = {
  "red": colored.red, "green": colored.green, "yellow": colored.yellow, "blue": colored.blue,
  "black": colored.black, "magenta": colored.magenta, "cyan": colored.cyan, "white": colored.white
}

def new_query(prompt, color, default='', validators=None, batch=False):
    # Set the nonempty validator as default
    if validators is None:
        validators = [validators_module.RegexValidator(r'.+')]

    # Let's build the prompt
    if prompt[-1] is not ' ':
        prompt += ' '

    if default:
        prompt += '[' + default + '] '

    # If input is not valid keep asking
    while True:
        # If batch option is True then auto reply
        # with default input
        if not batch:
            # now the output is colored as expected 
            puts(prompt_colors[color](prompt))
            user_input = input().strip() or default
        else:
            print(prompt)
            user_input = ''

        # Validate the user input
        try:
            for validator in validators:
                user_input = validator(user_input)
            return user_input
        except Exception as e:
            puts(yellow(e.message))

# now the query function is customized as per our needs
prompt.query = new_query

puts(colored.yellow("Hello!!!\n\n"))
user_input = prompt.query("Please enter something: ", "cyan")

введите описание изображения здесь

Примечание: Я думаю, что изменения достаточно понятны и не нуждаются в пояснениях, но если у вас есть вопросы, я буду рад ответить на них в разделе комментариев

0 голосов
/ 10 июля 2020

Причина, по которой это не работает, заключается в том, что prompt.py переводит ваш ввод в необработанную строку, таким образом не распознавая выбранный вами цвет. Я считаю, что это плохая реализация с их стороны. Вы можете доказать мою теорию, запустив user_number = prompt.query(str(colored.cyan('\nPlease enter something:\n')),batch=True) Это бесконечное l oop, но он печатает ваш цвет только потому, что он не переведен в raw в этом случае .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...