我正在尝试为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)
使用此代码,如果我继续输入提示,如果末尾没有空格,则应转到换行符,但它将覆盖同一行。
我查看了cmd.py
文件,它使用了input
方法和readline
。我认为这可能是input
方法的问题,我尝试了以下方法,但仅当我使用cmd
模块时,提示才中断。
inp = input("prompt ({}) > ".format(Str("home").red()))
已编辑:
我认为readline
的问题是,每当我导入readline
时提示就会中断,如果我不导入readline
则提示会正常工作。这是错误吗?
答案 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包装。