首页 > 解决方案 > 为什么我不能在 python CMD 模块中使用彩色提示?

问题描述

我正在尝试对cmdpython 中的模块使用彩色提示。

提示.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

数据类型.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)

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

问题

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

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

编辑:

我认为问题在于readline,每当我导入readline提示符时,如果我不导入readline提示符就可以正常工作。这是一个错误吗?

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

标签: python

解决方案


事实证明这不是python的问题。相反,这是 readline 工作方式的一个怪癖......

如果使用颜色提示,请查看如何修复 Python readline 中的列计算

颜色提示需要用 RL_PROMPT_START_IGNORE 和 RL_PROMPT_END_IGNORE 包裹。


推荐阅读