Добавляйте цвет только к специальному слову в строке, используя проклятия в Python - PullRequest
0 голосов
/ 16 мая 2019

У меня есть несколько строк, которые выглядят примерно так

domain1 = "│ domain1 │ 192.168.1.193 │ HTTP 200  │"
domain2 = "│ domain2 │ 192.168.1.194 │ HTTP DOWN │"
domain3 = "│ domain3 │ 192.168.1.195 │ HTTP DOWN │"
domain4 = "│ domain3 │ 192.168.1.196 │ HTTP 200  │"

Есть ли простой способ раскрасить HTTP DOWN до красного в проклятиях?

Вот полный код:

#!/usr/bin/env python3
import curses
import os

def draw_menu(stdscr):
    global looped, pingstart

    domains = [
    "│ domain1.com │ 192.168.1.193 │ HTTP 200  │",
    "│ domain2.com │ 192.168.1.194 │ HTTP DOWN │",
    "│ domain3.com │ 192.168.1.195 │ HTTP DOWN │",
    "│ domain3.com │ 192.168.1.196 │ HTTP 200  │"
    ]

    stdscr.clear()
    stdscr.refresh()
    # Start colors in curses
    curses.start_color()
    curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)
    curses.init_pair(2, curses.COLOR_BLACK, curses.COLOR_WHITE)
    curses.init_pair(3, curses.COLOR_RED, curses.COLOR_BLACK)
    curses.init_pair(4, curses.COLOR_CYAN, curses.COLOR_BLACK)
    curses.init_pair(5, curses.COLOR_BLUE, curses.COLOR_BLACK)
    curses.init_pair(6, curses.COLOR_GREEN, curses.COLOR_BLACK)
    curses.init_pair(7, curses.COLOR_MAGENTA, curses.COLOR_BLACK)
    curses.init_pair(8, curses.COLOR_YELLOW, curses.COLOR_BLACK)

    while True:

        stdscr.clear()
        height, width = stdscr.getmaxyx()

        c=0
        for domain in domains:
            stdscr.addstr(2+c, 0, domain)
            c+=1

        time.sleep(1)
        stdscr.refresh()

def main():
    curses.wrapper(draw_menu)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        exit()

Код немного упрощен. Проходит несколько шагов, чтобы получить эти последние строки.

Это, наверное, одна из моих самых грязных программ, которые я когда-либо делал, и, вероятно, мог бы конструировать ее по-другому


Я пытался сделать что-то вроде этого

domain1 = "│ domain1 │ 192.168.1.193 │ HTTP 200  │"
domain2 = "│ domain2 │ 192.168.1.194 │ \033[91mHTTP DOWN\033[0m │"

Но проклятия не поддерживают такого рода форматирование цвета

Есть ли более простой способ сделать это?

...