提问人:skeetastax 提问时间:11/9/2023 更新时间:11/10/2023 访问量:34
如何将一个或多个参数传递给python,将它们与可选的过滤器参数匹配,并仅将匹配的参数添加到数组中?
How do I pass one or more arguments to python, match them against an optional filter argument, and add only matching arguments to an array?
问:
我想:
- 将一个或多个 ()* 参数传递给 Python 脚本,
named
- 将可选参数也传递给脚本,
filter
- 将所有其他匹配(如果提供),
arguments
filter
- 将 all(如果提供,则匹配
filter
参数)添加到 ,arguments
array[]
- 如果给出 no 或仅给出参数,则退出 (is dependent on - requires - other )。
error message and syntax help
arguments
filter
filter
arguments
例如:
python script.py
应该生成帮助消息,然后退出。usage
python script.py --arg string
应将 arg 添加到 .string
array[]
python script.py --arg string1 --arg string2 --arg string3
应将 all 添加到 .arguments
array[]
python script.py --arg string1 --arg string2 --arg string3 --filter '*2*'
应该只添加那些与过滤器
匹配的参数
,所以在这种情况下,它只会添加到 并忽略其余的。array[]
string2
array[]
所以:
- 必须至少有一个
参数
, - 最多必须有一个
过滤器
参数,
这是一个示例,但它没有按预期工作,因为我认为没有以我上面解释的方式运行 - 它只需要任何一个参数,但没有指定需要哪一个参数:group = parser.add_mutually_exclusive_group(required=True)
import argparse
# Create an ArgumentParser object
parser = argparse.ArgumentParser(description='Dependent argument testing')
# Create a mutually exclusive group for the --arg and --filter options
group = parser.add_mutually_exclusive_group(required=True)
# Define the --arg argument (required)
group.add_argument('--arg', type=str, help='Specify the argument')
# Define the --filter argument (optional)
group.add_argument('--filter', type=str, help='Specify the filter (optional)')
# Parse the command-line arguments
args = parser.parse_args()
# Access the values of the arguments
if args.arg:
print(f'Argument: {args.arg}')
if args.filter:
print(f'Filter: {args.filter}')
答:
0赞
hpaulj
11/9/2023
#1
忘记相互排斥的群体。
要获得
script.py --arg string1 --arg string2 --arg string3 --filter '*2*'
使用“-h/--help”获取自动使用和帮助。在没有给出任何参数的情况下尝试使用是可能的,但我认为不值得付出额外的努力。
将 '--arg' 定义为 'append',您可以根据需要字符串。
'--filter' 可以是默认的 'store'。
包括要测试的。print(args)
剩下的就是后期解析逻辑和代码。
编辑
我希望有一个像这样的命名空间args
Namespace('arg'=['arg1','arg2','arg3'], 'filter'='*2*')
用
if args.filter is None:
...
测试是否提供了过滤器
if args.arg is empty:
.....
测试是否提供。
循环访问以应用并构建新列表。for 循环或列表推导应该有效。args.arg
filter
参数也可以是 而不是 .arg
nargs='+'
action='append'
如果两个属性都为空,则可以调用并退出。args
parse.print_usage()
评论
args
args.arg
array