例如,我有一个命令,它只接受几个非位置参数
send_dm -u def750 -n 15 -msg Hello world!
它接受整个列表和索引参数
('-u', 'def750', '-n', '1', '-msg', 'Hello', 'world!')
def750 1 "Hello
使用此代码:
allowed_args = ["-u", "-n", "-msg"]
index = args.index("-u") + 1
u = str(args[index])
index = args.index("-n") + 1
n = str(args[index])
index = args.index("-msg") + 1
msg = str(args[index])
我需要从-msg参数的开始到结束
如果我做了这样的事
send_dm -msg Hello world! -u def750 -n 15
我仍然会得到: 世界你好
现在我得到的唯一结果是-msg参数后的第一个元素,我不知道该怎么做
有很多方法可以做到这一点。一种方法是循环参数并根据标志的状态追加参数,尽管这会非常冗长
另一种方法是使用
itertools.groupby
根据后续元素是否以“-”开头对其进行分组,并使用itertools.filterfalse
过滤掉带破折号前缀的条目:或;立即将其放入字典,并过滤掉不允许的参数:
导致:
但它的可读性不强
或者更简单、更可扩展、更可读;使用标准库中的
argparse
,因为它是为此目的而构建的,并且提供了更多的功能。还有一些第三方库,可以方便地为您的程序构建CLI也许可以尝试在每个参数的开头查找
-
然后,您可以通过访问您的参数
产量
会是
我不确定您是否正在寻找,但您可以尝试:
输出:
相关问题 更多 >
编程相关推荐