optparse的另一种语法
runfunc的Python项目详细描述
runfunc
==
我喜欢optfunc,但它还没有被放到pypi上以供实际使用,所以我继续
并重新编写它以使用不同的语法,以便能够包括option help
和输入验证器。
作为rf
类帮助(rf.help):
"\
这是一个关于此程序的简介。观看并思考我们可以用它做些什么是非常有趣的。格式化文本。
("r","要读取的输入文件。",opt='r')
verbose=rf.flag("verbosely.",opt='v')
def main(value,factor=2.0,random=sys.stdin,verbose=false):
newval=value*factor
如果verbose:
打印%d*%s=%s"(value,fa)ctor,newval)
其他:
打印newval
rf.run(main,help())
帮助类
==
使用"runfunc"的基本大纲是创建"runfunc.help"的子类并在运行函数时使用"提供此类"。此子类负责指定传递给
函数的所有可能参数。它可以包含被忽略的额外参数,以便同一个
子类可以被多个命令行脚本重用。
类帮助(rf.help):
"\
这是一个关于此程序的模糊说明。观看并思考我们可以用它做些什么是非常有趣的。格式化文本。
要从中读取的输入文件。",opt="r"
verbose=rf.flag("verbosely.",opt="v")
注意:
*类的doc字符串将用作程序的帮助说明
*如果存在"usage"属性,则它将用于程序的帮助
*从"runfunc.arg"继承的任何其他属性都将可用作程序参数。
运行函数
==
==runfunc.run(可调用,帮助对象,argv=none,check=true)
*"可调用"是可调用对象。
*"帮助对象"是一个实例。继承自"runfunc.help"的类的ce。
*"argv"是参数列表。如果没有,则使用"sys.argv[1:]"
*"check=true"将阻止函数作为模块导入时运行。
*func-接受单个参数的可调用函数。出现错误时引发异常。
*desc-描述选项
*opt-单个字符选项名称的帮助消息。
flag(desc,opt=none)
----
根据选项的存在传递true。通常只适用于
关键字参数。
*desc-描述选项的帮助消息
*opt-单个字符选项名称。
list(desc,opt=none,validator=none)
--------
验证程序在附加每个
值之前应用。
*desc-描述选项
*opt-单个字符选项名称的帮助消息。
*validator-接受单个参数的可调用函数。出现错误时引发异常。
choice(choices,desc,opt=none,validator=none)
——验证程序在测试集合中的成员资格之前应用。
*choices-一个在对象上提供项目访问权以测试是否允许选项。
*desc-描述选项的帮助消息
*opt-一个单字符选项名称。
*validator-一个可调用的,接受一个契约。出现错误时引发异常。
regexp(pattern,desc,opt=none,flags=0)
---------------------------
需要输入以匹配正则表达式。
*pattern-可用于"重新编译(pattern,flags)"的字符串option
*opt-单个字符的选项名称。
*flags-编译正则表达式的任何修饰符
email(desc,opt=none)
----
需要输入,使其看起来像有效的电子邮件地址。regexp
*desc的子类-描述选项
*opt-单个字符选项名称的帮助消息。
=--
需要输入一个有效的IP地址。regexp的子类。
*desc-描述选项
*opt-单个字符选项名称的帮助消息。
path(flags,desc,opt=none)
----
需要输入指定路径。根据通过的标志执行测试。文件要求路径看起来像文件(没有尾随路径
说明符)。dir需要后面的路径说明符。exists将检查
路径是否实际存在。父级要求路径的父级存在。任何
标志的组合都可以通过传递文件dir来传递,这将保证在验证期间出现
错误。
*flags-文件dir的or存在,parent
*desc-描述选项
*opt-单字符选项名称的帮助消息。
stream(mode,desc,opt=无)
----------
打开一个用作"文件"对象的路径。一个有用的模式是使用默认值"sys.stdin"、"sys.stdout"或"sys.stderr"作为通用命令行
语义。
*mode-打开流时传递给"open(path,mode)"
*desc-描述选项的帮助消息
*opt-单个字符选项名。
custom validators
==ass range(rf.arg):
def初始(self,func,left,right,desc,opt=none):
超级(range,self)。\uu初始(desc,opt=opt)
self.func=func
self.left=left
self.right=right
def validate(self,option,optstr,value,parser):
value=self.func(value)
如果value<;self.left或value>;self.right:
提升rf.optionvalueerror("value is outside range.")
setattr(parser.values,option.dest,value)
注意func是spec使用户可以将原始值转换为适当的数据类型。
==
我喜欢optfunc,但它还没有被放到pypi上以供实际使用,所以我继续
并重新编写它以使用不同的语法,以便能够包括option help
和输入验证器。
作为rf
类帮助(rf.help):
"\
这是一个关于此程序的简介。观看并思考我们可以用它做些什么是非常有趣的。格式化文本。
("r","要读取的输入文件。",opt='r')
verbose=rf.flag("verbosely.",opt='v')
def main(value,factor=2.0,random=sys.stdin,verbose=false):
newval=value*factor
如果verbose:
打印%d*%s=%s"(value,fa)ctor,newval)
其他:
打印newval
rf.run(main,help())
帮助类
==
使用"runfunc"的基本大纲是创建"runfunc.help"的子类并在运行函数时使用"提供此类"。此子类负责指定传递给
函数的所有可能参数。它可以包含被忽略的额外参数,以便同一个
子类可以被多个命令行脚本重用。
类帮助(rf.help):
"\
这是一个关于此程序的模糊说明。观看并思考我们可以用它做些什么是非常有趣的。格式化文本。
要从中读取的输入文件。",opt="r"
verbose=rf.flag("verbosely.",opt="v")
注意:
*类的doc字符串将用作程序的帮助说明
*如果存在"usage"属性,则它将用于程序的帮助
*从"runfunc.arg"继承的任何其他属性都将可用作程序参数。
运行函数
==
==runfunc.run(可调用,帮助对象,argv=none,check=true)
*"可调用"是可调用对象。
*"帮助对象"是一个实例。继承自"runfunc.help"的类的ce。
*"argv"是参数列表。如果没有,则使用"sys.argv[1:]"
*"check=true"将阻止函数作为模块导入时运行。
*func-接受单个参数的可调用函数。出现错误时引发异常。
*desc-描述选项
*opt-单个字符选项名称的帮助消息。
flag(desc,opt=none)
----
根据选项的存在传递true。通常只适用于
关键字参数。
*desc-描述选项的帮助消息
*opt-单个字符选项名称。
list(desc,opt=none,validator=none)
--------
验证程序在附加每个
值之前应用。
*desc-描述选项
*opt-单个字符选项名称的帮助消息。
*validator-接受单个参数的可调用函数。出现错误时引发异常。
choice(choices,desc,opt=none,validator=none)
——验证程序在测试集合中的成员资格之前应用。
*choices-一个在对象上提供项目访问权以测试是否允许选项。
*desc-描述选项的帮助消息
*opt-一个单字符选项名称。
*validator-一个可调用的,接受一个契约。出现错误时引发异常。
regexp(pattern,desc,opt=none,flags=0)
---------------------------
需要输入以匹配正则表达式。
*pattern-可用于"重新编译(pattern,flags)"的字符串option
*opt-单个字符的选项名称。
*flags-编译正则表达式的任何修饰符
email(desc,opt=none)
----
需要输入,使其看起来像有效的电子邮件地址。regexp
*desc的子类-描述选项
*opt-单个字符选项名称的帮助消息。
需要输入一个有效的IP地址。regexp的子类。
*desc-描述选项
*opt-单个字符选项名称的帮助消息。
path(flags,desc,opt=none)
----
需要输入指定路径。根据通过的标志执行测试。文件要求路径看起来像文件(没有尾随路径
说明符)。dir需要后面的路径说明符。exists将检查
路径是否实际存在。父级要求路径的父级存在。任何
标志的组合都可以通过传递文件dir来传递,这将保证在验证期间出现
错误。
*flags-文件dir的or存在,parent
*desc-描述选项
*opt-单字符选项名称的帮助消息。
stream(mode,desc,opt=无)
----------
打开一个用作"文件"对象的路径。一个有用的模式是使用默认值"sys.stdin"、"sys.stdout"或"sys.stderr"作为通用命令行
语义。
*mode-打开流时传递给"open(path,mode)"
*desc-描述选项的帮助消息
*opt-单个字符选项名。
custom validators
==ass range(rf.arg):
def初始(self,func,left,right,desc,opt=none):
超级(range,self)。\uu初始(desc,opt=opt)
self.func=func
self.left=left
self.right=right
def validate(self,option,optstr,value,parser):
value=self.func(value)
如果value<;self.left或value>;self.right:
提升rf.optionvalueerror("value is outside range.")
setattr(parser.values,option.dest,value)
注意func是spec使用户可以将原始值转换为适当的数据类型。