为什么我不能在python CMD模块中使用彩色提示?

时间:2019-05-25 23:01:50

标签: python

我正在尝试为python中的cmd模块使用彩色提示。

prompt.py

from cmd import Cmd

from utils.data_types import Str

class Prompt(Cmd):
    def __init__(self):
        Cmd.__init__(self)
        self.prompt = "prompt ({}) > ".format(Str("home").red())

    def emptyline(self):
        pass

data_types.py

class Str(str):
    def red(self):
        return "\033[31m{}\033[0m".format(self)

    def green(self):
        return "\033[32m{}\033[0m".format(self)

    def yellow(self):
        return "\033[33m{}\033[0m".format(self)

    def blue(self):
        return "\033[34m{}\033[0m".format(self)

使用此代码,如果我继续输入提示,如果末尾没有空格,则应转到换行符,但它将覆盖同一行。

issue

我查看了cmd.py文件,它使用了input方法和readline。我认为这可能是input方法的问题,我尝试了以下方法,但仅当我使用cmd模块时,提示才中断。

inp = input("prompt ({}) > ".format(Str("home").red()))

已编辑:

我认为readline的问题是,每当我导入readline时提示就会中断,如果我不导入readline则提示会正常工作。这是错误吗?

显然不是错误:https://bugs.python.org/issue12972

1 个答案:

答案 0 :(得分:0)

原来这不是python的问题。而是,这是有关readline工作方式的怪癖...

Look how to fix column calculation in Python readline if use color prompt

颜色提示需要由RL_PROMPT_START_IGNORE和RL_PROMPT_END_IGNORE包装。