仅使用Python中的curses为字符串中的特殊单词添加颜色

时间:2019-05-16 15:10:08

标签: python colors curses

我有多个看起来像这样的字符串

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 │"

但是curses不支持这种颜色格式

有没有更简单的方法?

0 个答案:

没有答案