HiveNetPromptPlus.prompt_plus module¶
增强的交互命令行扩展处理, 基于prompt_toolkit进行封装和扩展
- class HiveNetPromptPlus.prompt_plus.MemoryStringStream(encoding=None)[源代码]¶
基类:
object内存中的字符串流定义类
用于将流内容输出到字符串中
- class HiveNetPromptPlus.prompt_plus.ProgressRate(rate: float = 0.0, show_process_bar_fun=None)[源代码]¶
基类:
object支持多层级函数调用的进度取值处理类
- __init__(rate: float = 0.0, show_process_bar_fun=None) None[源代码]¶
初始化进度取值处理类
- 参数
rate (float) – default=0.0, 进度初始值
show_process_bar_fun (function) –
default=None, 显示进度条的函数, 如果不传默认为 show_cmd_process_bar
注: 如需自定义函数, 函数定义必须为fun(rate:float, label:str, info:str, …)
- into_next_level(rate: Optional[float] = None, next_rate: Optional[float] = None)[源代码]¶
进入下一层进度处理
- 参数
rate (float) – default=None, 设置当前进度
next_rate (float) – default=None, 设置下一进度限制
- set_next_rate(next_rate: float, split_len: Optional[int] = None)[源代码]¶
设置下一个进度的最大值
- 参数
next_rate (float) – 下一个进度的最大值
split_len (int) – default=None, 对进度限制区间按步数设置步长
- set_rate(rate: float, next_rate: Optional[float] = None, split_len: Optional[int] = None)[源代码]¶
设置当前进度
注: 无需考虑所在层级, 直接按100的维度设置即可
- 参数
rate (float) – 当前进度值(传入1.0代表1%)
next_rate (float) – default=None, 下一个进度的最大值, 如果不设置代表仅设置进度, 不改变限制区间
split_len (int) – default=None, 对进度限制区间按步数设置步长
- classmethod show_cmd_process_bar(rate: float, label: str = '', info: str = '', bar_len: int = 50, bar_finish: str = '▋', bar_unfinish: str = ' ', **kwargs)[源代码]¶
命令行打印进度条
- 参数
rate (float) – 当前进度值(0-100之间)
label (str) – default=’’, 提示标签, 例如’Installing’, ‘Error’, ‘Done’, 显示在进度条前面
info (str) – default=’’, 提示信息, 显示在进度条结尾
bar_len (int) – default=50, 进度条长度
bar_finish (str) – default=’▋’, 进度条完成进度显示字符
bar_unfinish (str) –
default=’ ‘, 进度条未完成进度显示字符
注: 合适的搭配包括(’▋’, ‘ ‘), (‘*’, ‘>’)
- class HiveNetPromptPlus.prompt_plus.PromptPlus(message='CMD>', default='', **kwargs)[源代码]¶
基类:
object命令行扩展处理类,利用python-prompt-toolkit实现人机交互处理, 再补充封装命令处理部分登记注册的功能, 固定的操作:
Ctrl + C : abort,取消本次输入 Ctrl + D : exit,关闭命令行
- __init__(message='CMD>', default='', **kwargs)[源代码]¶
PromptPlus的构造函数
- 参数
message (string) – default=’CMD>’, 命令行提示符内容
default (string) – default=’’, string 交互输入的默认值, 直接显示在界面上, 可以进行修改后回车输入
kwargs (kwargs) –
扩展参数, 分为两部分, 第一部分为类自行封装的扩展参数,
第二部分为python-prompt-toolki的原生prompt参数(自行到到官网查找)
第一部分扩展参数说明如下:
cmd_para {cmdpara} - 命令参数字典
ignore_case {bool} - 匹配命令是否忽略大小写, 默认值为False
default_dealfun {function} - 在命令处理函数字典中没有匹配到的命令, 默认执行的处理函数
函数定义为fun(message=’’, cmd=’’, cmd_para=’’), 返回值为string, 是执行命令函数要输出的内容
on_abort {function} - 当用户取消输入(Ctrl + C)时执行的函数:
函数定义为fun(message=’’), 返回值为string、string_iter或CResult, 是执行命令函数要输出的内容
如果结果为CResult, 实际打印内容为CResult.msg, 并可通过错误码10101退出命令行
on_exit {fun} - 当用户退出(Ctrl + D)时执行的函数, 注意如果已输入部分内容, Ctrl + D将不生效:
函数定义为fun(message=’’), 返回值为string、string_iter或CResult, 是执行命令函数要输出的内容
如果结果为CResult, 实际打印内容为CResult.msg, 并可通过错误码10101退出命令行
logger {object} - logger 日志对象, 服务过程中通过该函数写日志:
可以为标准的logging日志库对象, 也可以为simple_log对象, 但要求对象实现:
标准的info、debug、warning、error、critical五个日志方法
enable_color_set {bool} - 默认True, 使用配色集方案:
如果选否则自行通过python-prompt-toolkit的方式设定配色方案
color_set {dict} - 要使用的配色集方案, 如果传None则使用系统默认配色集
enable_cmd_auto_complete {bool} - 默认True, 是否启用命令行自动完成提示
1、如果启用, 则使用命令行自带的completer, 实现命令、参数的自动完成功能;
不启用则可以自行传入completer、complete_in_thread等原生参数
2、可以与complete_while_typing参数共同生效, 控制是按tab提示还是输入自动提示
cmd_auto_complete_slow_time {float} - 默认0, 输入后延迟多久提示完成菜单
enable_cmd_path_auto_complete {bool} - 默认True, 是否启动路径输入的自动提示
- classmethod analyse_cmd_para(cmd_para_str='', is_start_in_string=False)[源代码]¶
解析命令的参数(通过流方式调用_analyse_para_stream_dealer)
- 参数
cmd_para_str (string) – default=’’, 要解析的参数字符串
is_start_in_string (bool) – default=False, 是否在字符串中间启动, 在多行分开解析时使用
- 返回
解析结果, 格式如下:
[参数名, 参数值, 关联符(‘=’或’ ‘), 开始位置(int), 结束位置(int), 引号是否结束(bool), 处理是否结束(bool)]
- 返回类型
list
- call_cmd_directly(cmd_str, shell_cmd: bool = False)[源代码]¶
外部直接使用实例执行命令, 不通过命令行获取
- 参数
cmd_str (string) – 要实行的命令(含命令本身和参数)
shell_cmd (bool) – default=False, 是否命令行直接执行模式
- static confirm(message: str = 'Confirm?', suffix: str = ' (y/n) ') bool[源代码]¶
提示客户输入确认
- 参数
message (str) – default=’Confirm?’, 获取输入的提示信息
suffix (str) – default=” (y/n) “, 提示后缀
- 返回
确认结果
- 返回类型
bool
- static format_html_text(text)[源代码]¶
将html字符串格式化为打印对象
- 参数
text (string) –
要格式化的html对象, 例如:
’<u>This is underlined</u>’
’<ansired>This is red</ansired>’
’<aaa fg=”ansiwhite” bg=”ansigreen”>White on green</aaa>’
- get_cmd_para(cmd: str) dict[源代码]¶
获取指定命令的命令行参数
- 参数
cmd (str) – 要获取的命令
- 返回
返回对应的命令行参数, 如果没有参数返回None
deal_fun (匹配到命令要执行的函数) : fun 函数定义(function类型)
name_para (para_name=para_value形式的参数) : dict(para_name: para_value_list)
para_name {string} - 参数名
para_value_list {string[]} - 对应参数名下的可选参数值清单, 如果para_value_list为None代表可以输入任意值
short_para (-para_char para_value 形式的参数) : dict(para_char, para_value_list)
para_char {char} - 短参数标识字符(单字符, 不带-)
para_value_list {string[]} - 对应参数名下的可选参数值清单, 如果para_value_list为None代表可以输入任意值
注: 该形式可以支持多个字符写在一个’-‘后面, 例如: -xvrt
long_para (-para_name para_value形式的参数) : dict(para_name, para_value_list)
para_name {string} - 参数名(可以多字符, 不带-)
para_value_list {string[]} - 对应参数名下的可选参数值清单, 如果para_value_list为None代表可以输入任意值
word_para (直接一个词形式的参数) : dict(word_name, ‘’)
word_name {string} - 直接参数名
- 返回类型
dict
- static get_cmd_para_list(cmd_para_str, str_char="'", tran_char='\\', with_name_para=True)[源代码]¶
根据字符串获取命令参数字典
- 参数
cmd_para_str (string) – 命令行参数字符串
str_char (string) – default=’’’, 字符串标识符
tran_char (string) – default=’', 字符串里的转义字符
with_name_para (bool) – default=True, 是否同时支持name_para的格式
示例
_cmd_para_str = “abc k1=v1 -a 10 20 -abc 30 -c ‘abcd hh=name’”
_list = get_cmd_para_dict(_cmd_para_str)
_list 为:
[
[‘’, ‘abc’],
[‘k1=’, ‘v1’],
[‘-a’, ‘10’],
[‘’, ‘20’],
[‘-abc’, ‘30’],
[‘-c’, “‘abcd hh=name’”]
]
- static get_process_bar(**kwargs)[源代码]¶
创建进度条对象
- 参数
进度条扩展参数 (-) –
参考prompt_toolkit.shortcuts.ProgressBar的初始化参数 (: kwargs) –
部分参数说明如下 –
示例
# 每隔0.01秒进度条加1
with PromptPlus.get_process_bar() as pb:
for i in pb(range(800)):
RunTool.sleep(.01)
# 传入一个自定义的iter对象
def some_iterable():
yield …
with PromptPlus.get_process_bar(title=title) as pb:
for i in pb(some_iterable, total=1000, label=label):
RunTool.sleep(.01)
注: ProgressBar的__call__方法(pb)参数如下:
data=None, label=’’, remove_when_done=False, total=None
data {iter} - 可自定义iter函数, 或则使用range生成一个区间的数字
label {string|formated text} - 进度条的标题文字, 可以为字符串或HTML格式对象
remove_when_done {bool} - 如果为 True, 则再完成时隐藏该进度条
total {int} - 如果data不支持len函数, 则通过该参数定义最大值
- prompt_once(message=None, default='', **kwargs)[源代码]¶
处理一次命令输入
- 参数
message (string) – default=None, 命令行提示符内容, 如果不传则代表使用实例的默认提示符
default (string) – default=’’, 人机交互输入的默认值, 直接显示在界面上, 可以进行修改后回车输入
kwargs (kwargs) – python-prompt-toolki的原生prompt参数
- 返回
处理结果, code定义如下:
’00000’ - 成功
’29999’ - 其他系统失败
’10100’ - 用户中断输入(Ctrl + C)
’10101’ - 用户退出应用(Ctrl + D)
- 返回类型
- prompt_print(*args, sep=' ', end='\n', line_head=False, level=20, format_print=False, style=None, flush=False, force_logging=False, my_logger=None)[源代码]¶
使用内置打印函数进行输出打印
- static simple_prompt(message='', deal_fun=None, **kwargs)[源代码]¶
简单命令行输入处理函数,获取键盘输入, 并返回输入处理结果
- 参数
message (string) – default=’’, 获取输入的提示信息
deal_fun (function) –
default=None, 获取到输入后执行的处理函数fun(prompt_text=’’), 函数要求满足:
输入参数为prompt_text, 返回值类型按实际需要返回即可
python-prompt-toolki的prompt参数 (kwargs) –
- 返回
如果deal_fun为None, 直接返回所获取到的输入值;
如果deal_fun不为None, 则返回deal_fun的执行返回值
- 返回类型
string|object
- 引发
exception – 可能会返回deal_fun执行中出现的各种异常
- start_prompt_service(tips='命令处理服务(输入过程中可通过Ctrl+C取消输入, 通过Ctrl+D退出命令行处理服务)')[源代码]¶
启动命令行服务(循环获取用户输入并执行相应命令)
- 参数
tips (string) –
default=u’命令处理服务(输入过程中可通过Ctrl+C取消输入, 通过Ctrl+D退出命令行处理服务)’,
命令行启动后的提示信息
- upd_cmd_para(cmd: str, cmd_para: dict)[源代码]¶
更新指定的命令的命令行参数
- 参数
cmd (str) – 要更新的命令
cmd_para (dict) –
命令行参数
deal_fun (匹配到命令要执行的函数) : fun 函数定义(function类型)
name_para (para_name=para_value形式的参数) : dict(para_name: para_value_list)
para_name {string} - 参数名
para_value_list {string[]} - 对应参数名下的可选参数值清单, 如果para_value_list为None代表可以输入任意值
short_para (-para_char para_value 形式的参数) : dict(para_char, para_value_list)
para_char {char} - 短参数标识字符(单字符, 不带-)
para_value_list {string[]} - 对应参数名下的可选参数值清单, 如果para_value_list为None代表可以输入任意值
注: 该形式可以支持多个字符写在一个’-‘后面, 例如: -xvrt
long_para (-para_name para_value形式的参数) : dict(para_name, para_value_list)
para_name {string} - 参数名(可以多字符, 不带-)
para_value_list {string[]} - 对应参数名下的可选参数值清单, 如果para_value_list为None代表可以输入任意值
word_para (直接一个词形式的参数) : dict(word_name, ‘’)
word_name {string} - 直接参数名
- class HiveNetPromptPlus.prompt_plus.PromptPlusCmdParaLexer(cmd_para=None, ignore_case=False)[源代码]¶
基类:
prompt_toolkit.lexers.base.LexerPromptPlus的命令关键字解析器, 继承prompt_toolkit.Lexer类, 实现自身对命令参数的解析和高亮处理
参考SimpleLexer(Lexer), 实际上需要实现的接口函数为lex_document(self, document)
- class HiveNetPromptPlus.prompt_plus.PromptPlusCompleter(cmd_para=None, ignore_case=False, slow_time=0, enable_path_suggest: bool = True)[源代码]¶
基类:
prompt_toolkit.completion.base.CompleterPromptPlus的自动完成类, 根据输入的状态以及命令行提示可用的命令和参数输入
该类继承prompt_toolkit.Completer类, 参考DummyCompleter类, 主要对外提供get_completions接口
- __init__(cmd_para=None, ignore_case=False, slow_time=0, enable_path_suggest: bool = True)[源代码]¶
PromptPlusCompleter的构造函数, 传入命令行参数
- 参数
cmd_para (cmdpara) – default=None, 命令参数字典
ignore_case (bool) – default=False, 匹配命令是否忽略大小写
slow_time (int) – default=0, 延迟提示的时长(秒), 0代表不延迟
enable_path_suggest (bool) – default=True, 是否启动路径选择建议
- class HiveNetPromptPlus.prompt_plus.SimpleCompleter(words, ignore_case: bool = False, slow_time: float = 0, select_mode: bool = False, sentence: bool = False, words_fun_arg=None)[源代码]¶
基类:
prompt_toolkit.completion.base.Completer简单的自动完成提示类
- __init__(words, ignore_case: bool = False, slow_time: float = 0, select_mode: bool = False, sentence: bool = False, words_fun_arg=None)[源代码]¶
简单的自动完成提示类
- 参数
words (list|function) –
要提示的单词列表或产生单词列表的执行函数对象
如果是函数, 函数定义为 func(当前词, 完整输入, words_fun_arg) -> 提示词列表
ignore_case (bool) – default=False, 匹配命令是否忽略大小写
slow_time (float) – default=0, 延迟提示的时长(秒), 0代表不延迟
select_mode (bool) – default=False, 是否选择模式, 如果是则不根据输入内容过滤选项
sentence (bool) – default=False, 是否句子, 如果是则将整个输入视为一个词进行匹配
words_fun_arg (Any) – default=None, 当words参数为函数时, 传入该函数的额外参数