我想为我的用户提供添加多个复杂对象的可能性,例如:库对象将是:
为此,我所做的是用append操作设置一个parameter-library,并向参数添加一个类型,以便它以正确的格式读取它,这将导致以下命令行: --library“library_name=test;library_number=5”,library type函数将测试并执行工作,但这不是一个很好的方法,还有其他方法可以做我想要的吗?在
我想像这样使用纳格:
--library test 5
这在我看来更好,但是我要关联的类型函数不能是一个复杂的函数,因为它是在返回数组的每个值上运行的!在
有什么想法吗?在
我应该再解释一下我想做什么。我正在开发一个工作流管理器引擎。它指定一个属性文件,其中定义所有参数,并解析此参数列表以构建正确的argparse对象。在
例如,我可以将库参数定义为前面定义的: 图书馆_姓名.姓名= ... 图书馆_名称.帮助= ... 图书馆_名称.类型=结构 图书馆_名称。必需=正确
^{pr2}$但是我希望这个对象设置为用户想要的库的任意数量,这样我就可以在这些选项中添加一个append操作,但是用户必须以正确的顺序提供所有输入:
--library-name lib1 --library-number 1 --library-name lib2 --library-number 2
但这对用户来说并不容易,我所做的是:
--library "name=lib1;number=1" --library "name=lib2;number=2"
但这不是“漂亮”,我更喜欢这样的格式,但我还是想看看这是不是正确的格式:
--library lib1 1 --library lib2 2
清楚了吗?在
我应该再解释一下,我改变了你给我的内容,这样用户就可以——库库名称=测试库编号=5,所以不需要提供所有字段,但是我希望其中一些字段是必需的,但要这样做,我需要知道一旦检查完所有参数,是否已经解决了所需的参数
class MiltipleParameters(object):
def __init__(self, types):
self.types = types
self.index = None
self.__name__ = "MiltipleParameters"
def __call__(self, arg):
parts = arg.split("=")
if not self.types.has_key(parts[0]):
raise argparse.ArgumentTypeError(parts[0] + " is an invalid flag! Available ones are: "+", ".join(self.types.keys()))
try:
value = self.types[parts[0]](parts[1])
except:
raise argparse.ArgumentTypeError("invalid " + self.types[parts[0]].__name__ + " value: '" + parts[1] + "' for sub parameter '" + parts[0] + "'")
self.index = parts[0]
return (parts[0], value)
此类型使用参数为的哈希表_名称:类型,我可以添加所需字段以便进行检查。但我确实需要知道什么时候结束,以检查所需的参数在哪里设置。 有可能吗?在
您可以创建一个非常简单的状态机:
用作:
^{pr2}$以及一些错误输出:
如果可以接受以下格式:--library lib1:1--library lib2:2
如果您喜欢使用:--library lib1 1-library lib2 2 2
^{pr2}$然后,您必须执行额外的类型检查以获取int而不是str
如果库名称中不包含空格,则只需使用一个字符串即可
这将返回一个列表
library
,名称为library[0]
,编号为library[1]
。在相关问题 更多 >
编程相关推荐