你需要使用
partial parsing
具有
parser.parse_known_args()
为了实现你想要的,和/或明确地将你的参数作为一个列表传递。
通常,没有参数
parser.parse_args()
从中获取所有值
sys.argv[1:]
(所以除了第一个元素)作为要分析的输入。如果该列表中有无法分析的元素,则会打印一条错误消息,并
sys.exit(1)
调用;您的脚本将退出。
所以如果你想要
一些
争论
sys.argv
要转到一个解析器,而将其余部分转到另一个解析器,您需要使用
parser.parse_known_args()。
并将其余部分传递给另一个解析器。
我将分为创建和配置
ArgumentParser()
解析中的实例;因此
module1
做:
def module1_argument_parser():
parser = argparse.ArgumentParser()
optional = parser._action_groups.pop()
required = parser.add_argument_group('required arguments')
required.add_argument('--argA', help='argA', required=True)
required.add_argument('--argB', help='argB', required=True)
optional.add_argument('--argC', help='argC')
optional.add_argument('--argD', help='argD')
parser._action_groups.append(optional)
return parser
def parse_arguments_module1(args=None):
parser = module1_argument_parser()
return parser.parse_args(args)
if __name__ == '__main__':
args = parse_arguments_module1()
print(args)
而在
module2
,使用相同的结构,但从
模块1
:
from module1 import module1_argument_parser
def module2_argument_parser():
parser = argparse.ArgumentParser()
# create argument switches, etc.
return parser
def parse_arguments_module2(args=None):
parser = module2_argument_parser()
return parser.parse_args(args)
if __name__ == '__main__':
module1_parser = module1_argument_parser()
module1_args, remainder = module1_parser.parse_known_args()
module2_args = parse_arguments_module2(remainder)
print(module1_args)
print(module2_args)