HiveNetPromptPlus.prompt_plus module

增强的交互命令行扩展处理, 基于prompt_toolkit进行封装和扩展

class HiveNetPromptPlus.prompt_plus.MemoryStringStream(encoding=None)[源代码]

基类:object

内存中的字符串流定义类

用于将流内容输出到字符串中

__init__(encoding=None)[源代码]

构造函数

write(out_stream)[源代码]

将内容写入流

参数

out_stream (string) – 要输出的流内容

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, …)

add_rate_by_step(step: Optional[float] = None)[源代码]

进度增加指定步长

参数

step (float) – default=None, 指定步长

exit_current_level()[源代码]

退出当前进度层级

get_current_rate() float[源代码]

获取当前进度

返回

当前进度

返回类型

float

get_step() float[源代码]

获取当前步长

返回

获取到的步长

返回类型

float

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, 对进度限制区间按步数设置步长

set_split_len(split_len: int)[源代码]

设置补偿

参数

split_len (int) – 对进度限制区间按步数设置步长

set_step(step: float)[源代码]

设置当前步长

参数

step (float) – 要设置的步长

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=’ ‘, 进度条未完成进度显示字符

    注: 合适的搭配包括(’▋’, ‘ ‘), (‘*’, ‘>’)

show_progress_bar(label: str = '', info: str = '')[源代码]

输出进度条现实

参数
  • label (str) – default=’’, 提示标签, 例如’Installing’, ‘Error’, ‘Done’, 显示在进度条前面

  • info (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函数, 则通过该参数定义最大值

static print_formatted_text(*args, **kwargs)[源代码]

打印格式化后的文本(带颜色、字体等格式)

注: 可以兼容print方法

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)

返回类型

CResult

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.Lexer

PromptPlus的命令关键字解析器, 继承prompt_toolkit.Lexer类, 实现自身对命令参数的解析和高亮处理

参考SimpleLexer(Lexer), 实际上需要实现的接口函数为lex_document(self, document)

__init__(cmd_para=None, ignore_case=False)[源代码]

PromptPlusCmdParaLexer的构造函数

参数
  • cmd_para (cmdpara) – default=None, 命令参数字典

  • ignore_case (bool) – default=False, ignore_case 匹配命令是否忽略大小写

lex_document(document)[源代码]

实现Lexer类的解析文档函数, 按行解析并返回对应的样式, 字符列表

参数

document (prompt_toolkit.document) – 要解析的lex文档

class HiveNetPromptPlus.prompt_plus.PromptPlusCompleter(cmd_para=None, ignore_case=False, slow_time=0, enable_path_suggest: bool = True)[源代码]

基类:prompt_toolkit.completion.base.Completer

PromptPlus的自动完成类, 根据输入的状态以及命令行提示可用的命令和参数输入

该类继承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, 是否启动路径选择建议

get_completions(document, complete_event)[源代码]

重载Completer的提示函数

参数
  • document (prompt_toolkit.document) – 要处理的文档

  • complete_event (function) – 事件

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参数为函数时, 传入该函数的额外参数

get_completions(document, complete_event)[源代码]

重载Completer的提示函数

参数
  • document (prompt_toolkit.document) – 要处理的文档

  • complete_event (function) – 事件