gpt4 book ai didi

python - 一些字符坚持我在 Python cmd 中的彩色提示

转载 作者:太空狗 更新时间:2023-10-29 20:23:47 25 4
gpt4 key购买 nike

我正在使用 Python 2's cmd module为程序制作命令行。只要我不为我的提示添加颜色,一切都很好。

工作代码:

from cmd import Cmd

class App(Cmd):

def __init__(self):
Cmd.__init__(self)
self.prompt = "PG ["+ (str('username'), 'green') +"@"+ str('hostname') +"]: "

def do_exit(self, line):
'''
'''
return True

App().cmdloop()

当我如下更改我的代码时,如果我输入一个长命令或尝试在命令历史记录中搜索,一些字符会坚持我的提示。

问题代码:

from cmd import Cmd

class App(Cmd):

def __init__(self):
Cmd.__init__(self)
self.prompt = "PG ["+ self.colorize(str('username'), 'green') +"@"+ str('hostname') +"]: "

colorcodes = {'green':{True:'\x1b[32m',False:'\x1b[39m'}}


def colorize(self, val, color):
return self.colorcodes[color][True] + val + self.colorcodes[color][False]

def do_exit(self, line):
'''
'''
return True

App().cmdloop()

你可以在 asciicasts 中看到这个问题. cmd2 module 也存在此问题.

最佳答案

只需在您的颜色代码中添加标记即可:

    colorcodes =    {'green':{True:'\x01\x1b[32m\x02',False:'\x01\x1b[39m\x02'}}
# ^^^^ ^^^^ ^^^^ ^^^^

在您的 asciiccast 中,当您离开 i-search 模式并重新打印提示时,您会遇到问题。那是因为 Python 不知道转义字符实际上并不占用屏幕空间。在每个转义序列之前放置 \x01,在每个转义序列之后放置 \x02,告诉 Python 假设这些字符不占用空间,因此提示将被正确地重印。

这与 this answer 中的解决方案相同,在不同的上下文中有相应的问题。有一个 open issue在 Python readline 文档中提及这一点,但我没有看到它已经完成。

我在 Cygwin 上用 Python 2.7.12 测试了上面的 colorcodes 值,在 mintty 中运行。在提示中,username 打印为绿色,其他所有内容均打印为默认值(浅灰色)。我使用了标准系统 cmd 模块,不是 cmd2(您链接的)。

关于python - 一些字符坚持我在 Python cmd 中的彩色提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43304113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com