从python/argparse删除参数(不使用parse_known_args)

2024-04-27 04:10:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个程序,一个是另一个的包装。在

主程序的args顺序为arg1,--arg1,--arg2 包装程序有主程序的所有参数,以及附加的参数--arg3,--arg4

我希望能够将参数从包装器传递到主程序,而不会出现“参数无法识别”错误。但是,我不想使用parse已知的参数,因为如果用户犯了错误或使用了无意义的参数,那么用户将收到零反馈。(我已经看过this question

除了手动搜索每个单独的参数名,然后在该名称后面紧跟着的任何值(如果该名称存在,并且它是一个需要在后面有一个参数的参数),是否有更优雅的方法来清除某些值集的参数,以便将它们传递给另一个解析器?在


Tags: 用户程序名称参数顺序parse错误args
1条回答
网友
1楼 · 发布于 2024-04-27 04:10:14

混合各种部分零件的示例:

import argparse

def foo(parser, alist):
   for arg in alist:
        parser.add_argument(' '+arg, action='store_true')

parser1 = argparse.ArgumentParser()
foo(parser1, ['arg1','arg2'])

parser2 = argparse.ArgumentParser()
foo(parser2, ['arg3','arg4'])

parser12 = argparse.ArgumentParser()
foo(parser12, ['arg1','arg2','arg3','arg4'])

args = parser12.parse_args()
print('p12', args)

args, extras = parser2.parse_known_args()
print('p2',args, extras)

args = parser1.parse_args(extras)
print('p1',args)

args, extras = parser1.parse_known_args()
print('p1p',args, extras)

无:

^{pr2}$

全部:

1722:~/mypy$ python3 stack47866170.py  arg1  arg2  arg3  arg4
p12 Namespace(arg1=True, arg2=True, arg3=True, arg4=True)
p2 Namespace(arg3=True, arg4=True) [' arg1', ' arg2']
p1 Namespace(arg1=True, arg2=True)
p1p Namespace(arg1=True, arg2=True) [' arg3', ' arg4']

子集

1723:~/mypy$ python3 stack47866170.py  arg1  arg2
p12 Namespace(arg1=True, arg2=True, arg3=False, arg4=False)
p2 Namespace(arg3=False, arg4=False) [' arg1', ' arg2']
p1 Namespace(arg1=True, arg2=True)
p1p Namespace(arg1=True, arg2=True) []
1723:~/mypy$ python3 stack47866170.py  arg1  arg3
p12 Namespace(arg1=True, arg2=False, arg3=True, arg4=False)
p2 Namespace(arg3=True, arg4=False) [' arg1']
p1 Namespace(arg1=True, arg2=False)
p1p Namespace(arg1=True, arg2=False) [' arg3']

错误-被parser12捕获:

1724:~/mypy$ python3 stack47866170.py  arg1  foo
usage: stack47866170.py [-h] [ arg1] [ arg2] [ arg3] [ arg4]
stack47866170.py: error: unrecognized arguments:  foo

相关问题 更多 >