没有项目描述
cmdi的Python项目详细描述
CMDI-命令界面
说明
一种修饰程序,它将一个称为命令接口的特殊接口应用于其修饰函数。最初是为构建库编写的
命令界面允许您通过命令界面控制函数的执行。:
- 它允许您保存/重定向/禁用输出流(stdout/stderr)以实现其修饰功能。这在文件描述符级别工作,因此可以重定向子进程和C代码的输出。
- 它允许您捕捉其修饰函数的异常,并使用
cmdresult()
返回它们,包括返回代码、错误消息和有色的状态消息 - 它允许您在运行时打印命令的状态消息和摘要。
- 还有更多…
用@command
修饰的函数可以接收一组特殊的关键字参数(\u verbose=…
,\u stdout=…
,\u stderr=…
,catch\u err=…
等),并返回一个cmdresult()
对象。
要求
python>;=3.7
安装
pip install cmdi
用法
@命令
装饰器
使用@命令装饰符将命令接口应用于函数。
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
现在您可以使用 它将打印以下输出(彩色): 并返回一个 您可以使用一组应用于修饰函数的特殊关键字argumnets来定义命令函数的行为。 在本例中,我们将 有关特殊关键字参数的详细信息,请参阅下面的API文档。 命令总是返回一个 注意:在上面的示例中,我们返回一个自定义的 有时,您希望对现有函数使用命令接口,而不接触函数定义。您可以通过创建命令接口包装器来完成此操作: 如果需要为运行 此装饰器允许您将命令界面应用于函数。 用 在运行时启用/禁用打印标题/状态消息。 示例: 启用/禁用标题/状态消息的颜色。 示例: 重定向子函数的stdout。 示例: 重定向子函数的stderr。 示例: 如果要将 从子函数捕获错误。 这将允许运行时继续,即使子函数抛出异常。如果发生异常,则 示例:
从CMDI导入管道 命令结果对象。 用 使用此类型为命令调用配置 参数 示例: 如果要重定向运行子进程或调用C代码的函数的输出,则必须使用带参数 参数 返回 从字典中删除cmdargs。
此函数对于命令接口包装器 示例用法: 参数 返回 打印命令结果的标题 示例用法: 输出: 参数 返回 打印命令结果的状态。 示例用法: 输出: 参数 返回 打印出CmdResult对象。 示例用法: 输出: 参数 返回 输出: 参数 返回 这将返回一个迭代器,该迭代器逐行返回 示例用法:foo_cmd
作为命令
result=foo_cmd(10)
Cmd: foo_cmd
------------
10
foo_cmd: Ok
cmdresult
对象:CmdResult(val=20,code=0,name='foo_cmd',status='Ok',color=0,stdout=None,stderr=None)
命令函数参数
foo-cmd
的输出重定向到自定义编写器并捕获异常,然后使用cmdresult()
对象返回异常的输出和信息:fromcmdiimportCmdResult,Piperesult=foo_cmd(10,_stdout=Pipe(),_catch_err=True)isinstance(result,CmdResult)# Trueprint(result.stdout)# prints caught output.
自定义命令函数的结果
cmdresult
对象,对于该对象,@command
包装函数会自动猜测值,这在许多情况下都足够了。但有时需要对输出进行细粒度控制,例如创建特定于函数的返回代码:@commanddeffoo_cmd(x:str,**cmdargs)->CmdResult:print(x)somestr="foo"+xifx=="bar":code=0else:code=42# Return a customized Command Result:returnCmdResult(val=somestr,code=code,)
cmdresult
,我们只为其自定义字段val
和code
。您可以自定义cmdresult
对象的每个字段(可选)。您漏掉的字段将自动设置。命令接口包装器
fromcmdiimportcommand,strip_cmdargs,CmdResult# This function wraps the Command Interface around an existing function:@commanddeffoo_cmd(x,**cmdargs)->CmdResult:returnfoo(**strip_cmdargs(loclas()))# The original function that is being wrapped:deffoo(x)->int:print(x)returnx*2
命令接口包装器和子进程返回代码。
子流程
的现有函数创建命令接口包装器,并且您的命令依赖于该函数的返回代码
,则可以使用子流程.calledprocesserror
异常来编写某些内容。例如:importsubprocessasspfromcmdiimportcommand,CmdResult,Status@commanddeffoo_cmd(x,**cmdargs)->CmdResult:try:returnfoo(**strip_cmdargs(locals()))exceptsp.CalledProcessErrorase:ife.returncode==13:returnCmdResult(code=e.returncode,status=Status.ok,)elife.returncode==42:returnCmdResult(code=e.returncode,status=Status.skip,)else:raisesp.CalledProcessError(e.returncode,e.args)deffoo(x)->int:returnsp.run(["my_arg"],check=True,...)
API
装饰器
@command
@command
修饰的函数可以采用以下关键字参数:详细:bool=true
0
pip install cmdi
颜色:bool=true
1
pip install cmdi
\u标准输出:可选[管道]=无< /代码>
2
pip install cmdi
\u stderr:union[可选[管道],stdout]=无
3
pip install cmdi
stderr
重定向到stdout
,则可以使用此命令:
4
pip install cmdi
捕获错误:bool=true
cmdresult
对象将在result.stderr
、result.code
和result.status
提供有关错误的信息。状态信息将显示为红色。
5
pip install cmdi
数据类
cmdresult()
@command修饰的函数返回
cmdresult
对象:
6
pip install cmdi
数据类
pipe()
stdout
/stderr
。save:bool=true
-如果true
text:bool=true
-如果true,则将函数输出另存为文本
否则另存为字节。dup:bool=false
-如果true,则在文件描述器级别重定向输出。这允许您重定向子流程和C代码的输出。
tty:bool=false
-如果true
,则保留保存输出的ANSI序列,否则删除ANSI序列。静音:bool=false
-如果true
,则将终端功能调用的输出静音。注意:如果启用此选项,您仍然可以保存并返回输出。
7
pip install cmdi
重定向运行子进程或C代码的函数输出。
dup=true
的管道。这将在较低级别捕获stdout/stderr的输出(通过复制文件描述符):
8
pip install cmdi
函数
strip\u cmdargs(locals)
本地语言:dict[str,any]
dict[str,any]
9
pip install cmdi
功能
打印标题(结果、颜色、文件)
结果:命令结果
颜色:bool=true
文件:可选[io[str]]=无
无
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
0
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
1
功能
打印状态(结果、颜色、文件)
结果:命令结果
颜色:bool=true
文件:可选[io[str]]=无
无
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
2
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
3
功能
打印结果(结果、颜色、文件)
结果:命令结果
颜色:bool=true
文件:可选[io[str]]=无
无
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
4
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
5
功能
打印摘要(结果、颜色、标题、文件)
结果:命令结果
颜色:bool=true
标题:bool=true
文件:可选[io[str]]=无
无
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
6
fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
7
功能
读取管道(p,间隔)
p:subprocess.popen
interval:int=10
-输出流的读写间隔。迭代器[元组[str,str]]
stdout
和stderr
的popen pipes。fromcmdiimportcommand@commanddeffoo_cmd(x,**cmdargs)->CmdResult:print(x)returnx*2
8
推荐PyPI第三方库