python - 如何按值解析 argparser 参数
问题描述
目前我正在编写接受这样的空格分隔参数的脚本
parser = argparse.ArgumentParser(description='foo 1.0')
parser.add_argument('-a', '--arch', help='specify the angle', nargs="+" choices=ch_list, required=True
我正在路过
+foo +bar +baz
或者
-foo -bar -baz
或者
foo bar baz
foo bar baz
字母元素在哪里
整理论点最优雅的方法是什么?
如果参数混合发生,脚本应该抛出错误并退出+
。-
解决方案
1)您不能传递任何-foo, -baz, -bar
值。连字符将使 ArgParse 将其解释为选项标志并抛出错误。
2)
整理论点最优雅的方法是什么?
你可以有
ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz']
这将确保该列表之外的任何内容都被允许,但它不会阻止用户输入不同格式的混合和匹配 say ./program --arch foo +baz +bar
。
为防止这种情况发生,您需要在parse_args()
.
args = parser.parse_args()
l = args.arch if args.arch is not None else []
if len(l):
has_plus = lambda x : x[0] == '+'
first_has_plus = has_plus(l[0])
for x in l:
if first_has_plus ^ has_plus(x):
print("INVALID")
return
print("PASSED")
推荐阅读
- reactjs - Testing HOC with Recompose
- php - 如果设置了变量,如何检查 PHP 并检查两个值是否与设置的变量匹配?
- node.js - 在私有网络中使用 nodejs 与智能合约交互
- javascript - 在 rpivottable 中分组排序
- c# - How can I get a Span
from a List while avoiding needless copies? - php - symfony 3.4 nginx 服务器上的缓存问题
- azure-pipelines-build-task - VSTS Docker 任务 yaml 文件从 docker hub 拉取镜像
- sql - Unable to insert into datetime2 sql column
- php - 即使字符编码是 ut8_general_ci,阿拉伯语也不能很好地加载
- javascript - 如何在 HTML 5 中播放经过身份验证的音频流?