python命令行输入函数回退_Python argz包_程序模块 - PyPI - Python中文网

阿尔兹

''/H1>

懒汉的参数解析。

核心概念简单胜过健壮

脚本需要参数

使用此脚本的"使用者"本身就是开发人员

用法# $ cat example.pyimportjsondeffunc(jsondict,dbg=False):"""put descriptive docstring here"""pass# use jsondictif__name__=='__main__':importargzf=argz.route(func)f.jsondict.adapter=[open,json.load]# will be chainedargz.go()# will use sys.argv as input

跑步:$ example.py

Usage:example.py jsondict [-dbg]for detailed help, use any of (-h, /h, -?, /?, /help, --help)$ example.py -h

|> jsondict [-dbg]|| jsondict| adapter | [, ]| dbg| default | False| adapter | ||- - doc - -|| put descriptive docstring here|_ _ _ _ _ _

安装

下载文件或使用pip:pip install argz

传递参数:命名vs位置

可以按名称或位置传递任何参数。

如果参数以双破折号开头,则该参数将被视为已命名,否则*将被视为位置参数。

您可以传递位置参数和命名参数的混合,因为argz将跟踪哪些参数将根据函数定义中的顺序进行解析。

*除了开关之外

文件中的参数

要将参数从文件传递到脚本,可以在其路径前面加上@。这必须是传递给脚本的第一个参数。如果有多个路由,则必须将路由名称作为第一个参数包含在文件中。

当前argz不允许文件输入和命令行输入的混合。

适配器

接受字符串参数并返回"adapted"值的可调用对象,该值稍后将传递给路由函数。

如果适配器是一个序列,则每个适配器都将被链接,以便前者的返回值被传递给后者,使用最后一个返回值作为路由函数的输入。

要中止解析过程,可能会引发任何异常。消息属性将打印给用户。

验证器

用于在进行任何调整之前验证输入。可以是以下类型之一:regex string:将用于与输入匹配

可调用对象:将使用输入字符串调用。任何异常或非truthy值都将中止解析过程并向用户显示消息。

任何实现\u的对象都包含deffunc(alphanum,filepath,key,novalidation):"""put descriptive docstring here"""pass# ...f=argz.route(func)f.alphanum.validator='[a-zA-Z0-9]{2,}'f.filepath.validator=os.path.isfilef.key.validator={'option1':1,'option2':2}argz.go()

最小/最大

您可以为参数设置最小值和/或最大值:deffunc(count):"""put descriptive docstring here"""pass# ...f=argz.route(func)f.count.min=1# same for maxargz.go()

验证和适配器运行后,将检查这些约束。

两个值都包含在内。例如,无符号字符范围将是:

min=0;max=0xff

回退与默认值

设置任何一个参数都将视为可选,但是,它们有一个主要区别:< Buff行情>

默认值是将传递给调用的路由而不进行任何解析或验证的任何值。< Buff行情>

fallback是一个字符串值,它将通过所有验证和分析,就像是通过命令行指定的一样。

如果参数不是通过命令行提供的,argz将使用回退或默认。回退值优先。

如果在函数定义中指定了默认值,argz将使用它作为参数的默认值,并在某些情况下推断默认适配器(请参见受支持的推断适配器)。

开关

具有默认布尔值的函数参数将被推断为开关。这意味着此参数也可以使用单个破折号传递,后面没有值(例如-dbg)。这样做将"切换"默认值(false到true,反之亦然)

上面example.py代码中的dbg参数演示了这一点。

使用拆分

设置参数的split成员会更改一些内容:将使用该字符串拆分输入

如果设置,将根据列表的长度检查min\max值

瓦利将分别为列表中的每个项调用数据或分析器

瓦拉格斯和夸格斯:

如果函数接受它们,则任何附加的位置参数和命名参数将分别以varargs/kwargs形式传递。

适配器和验证器将与整个列表/字典一起调用,它们必须返回相同类型的值。

访问函数参数

设置参数属性有两种方法:姓名:f=argz.route(func)f.myvar.min=1按索引:f=argz.route(func)f[0].min=1< Buff行情>

注意:参数名区分大小写

分析流

下图说明了分析参数的流程(varargs\kwargs不支持拆分输入):+------------+ +-----------+ +-----------+

| fallback | | input | | default |

+-----+------+ +-----+-----+ +-----+-----+

| | |

+-------+-------+ |

| |

v |

+----+-----+ |

| split? | |

+---+-+----+ |

| | |

| | Yes |

+----------+ v |

| +--------+--------+ |

No | | min / max len | |

| +--------+--------+ |

+-------+ | |

| | +-----------+ |

V v v | |

+--------+----+---+ | |

| | | |

| validator | | |

| + | | |

| v | | |

| adapter chain | | |

| | | |

+--------+----+---+ | |

| | | |

| | split? | |

| | | |

| +-----------+ |

+--------+---------+ |

| min / max check | (if not split) |

+--------+---------+ |

| |

v |

+-------+--------+ |

| return value |

+----------------+

使用多个路由

您可以使用argz导出多个不同的路由。

这意味着用户必须选择要运行的程序:# $ cat example.pyimportjsondeffunc(jsondict,dbg=False):"""put descriptive docstring here"""pass# use jsondictif__name__=='__main__':importargzf=argz.route(func)f.jsondict.adapter=[open,json.load]# will be chainedargz.go()# will use sys.argv as input0

跑步:# $ cat example.pyimportjsondeffunc(jsondict,dbg=False):"""put descriptive docstring here"""pass# use jsondictif__name__=='__main__':importargzf=argz.route(func)f.jsondict.adapter=[open,json.load]# will be chainedargz.go()# will use sys.argv as input1

# $ cat example.pyimportjsondeffunc(jsondict,dbg=False):"""put descriptive docstring here"""pass# use jsondictif__name__=='__main__':importargzf=argz.route(func)f.jsondict.adapter=[open,json.load]# will be chainedargz.go()# will use sys.argv as input2

< Buff行情>

注意:只要有多个可用的路由,就允许路由在没有参数的情况下运行。

覆盖默认值

通过将doc参数传递到route可以指定显示详细帮助时要打印的自定义文档字符串。要完全抑制它,请传递一个空字符串。

如果您使用的单个路由接受名称位于help_options中的参数,则可以在调用go时指定custom_help_options列表来替换这些参数。

测试时间python 2.7.15,Windows 10

Python 3.7.2,Windows 10

故障排除

要启用日志记录:# $ cat example.pyimportjsondeffunc(jsondict,dbg=False):"""put descriptive docstring here"""pass# use jsondictif__name__=='__main__':importargzf=argz.route(func)f.jsondict.adapter=[open,json.load]# will be chainedargz.go()# will use sys.argv as input3

日志级别将传递到logger.setlevel

测试

添加了一些单元测试,运行run tests.bat

许可证

麻省理工学院< /P>

待办事项允许文件输入和命令行输入的混合

规范化/删除参数名中的下划线(/code>)

使用route对象属性处理名称冲突

根据类型注释/提示推断(PY3签名?)

查看代码:# $ cat example.pyimportjsondeffunc(jsondict,dbg=False):"""put descriptive docstring here"""pass# use jsondictif__name__=='__main__':importargzf=argz.route(func)f.jsondict.adapter=[open,json.load]# will be chainedargz.go()# will use sys.argv as input4

欢迎加入QQ群-->: 979659372

9ddc589a9bae9dd81334056da3504a2c.png

推荐PyPI第三方库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值