我从Perl转换为Python的一些应用程序具有相当聪明的参数解析系统,其中具有指定的前导子串(“前缀”)的命令选项(例如'-xyz-..'
)被识别并作为标准集的一部分进行处理。所以这似乎非常适合argparse
的Python“父母”设施。
但是,Perl代码还允许同一类型标准集的多个实例,并且这个argparse
父设施是否或如何扩展以处理该设施并不明显。
所以我需要的是:
from xyz import parser # instance 1 (options start -xyz1-..)
from xyz import parser # instance 2 (options start -xyz2-..)
parser = argparse.ArgumentParser(parents=[xyz1.parser, xyz2.parser])
...
所以在这个粗略的代码大纲中需要一些方法来
答案 0 :(得分:2)
这似乎可以做你想要的。
import argparse
import xyz1
import xyz2
parser = argparse.ArgumentParser(
description="My program",
parents=[xyz1.parser, xyz2.parser])
parser.add_argument("-s", "--sky")
parser.parse_args(["--help"])
import argparse
parser = argparse.ArgumentParser(description="XYZ1 args", add_help=False)
parser.add_argument("-xyz1-cat", action='store_true')
parser.add_argument("-xyz1-dog", action='store_true')
import argparse
parser = argparse.ArgumentParser(description="XYZ2 args", add_help=False)
parser.add_argument("-xyz2-lizard", action='store_true')
parser.add_argument("-xyz2-spock", action='store_true')
$ python main.py
usage: main.py [-h] [-xyz1-cat] [-xyz1-dog] [-xyz2-lizard] [-xyz2-spock]
[-s SKY]
My program
optional arguments:
-h, --help show this help message and exit
-xyz1-cat
-xyz1-dog
-xyz2-lizard
-xyz2-spock
-s SKY, --sky SKY
基于OP的评论," 我想要一个可以参数化的xyz.py模块",这可能是他想要的:
import argparse
import xyz
parser = argparse.ArgumentParser(
description="My program",
parents=[xyz.parser("xyz1"), xyz.parser("xyz2")])
parser.add_argument("-s", "--sky")
parser.parse_args(["--help"])
import argparse
def parser(prefix):
result = argparse.ArgumentParser(add_help=False)
result.add_argument("--%s-cat"%prefix, action='store_true')
result.add_argument("--%s-dog"%prefix, action='store_true')
return result