我一直在研究argparse文档,但我仍然对如何使用它感到困惑。 我做了一个python脚本,在代码分析后从pmd,checkstyle或findbugs中获取问题。这些问题也被分类为严重性,阻塞性和严重性等严重性。
所以我希望能够以python script.py arg1 arg2
形式传递两个参数,其中arg1
将是p,c,f
的组合,代表pmd,checkstyle或findbug和{{ 1}}将是arg2
的组合,代表主要,关键和阻止。
因此,例如,如果我在终端中写m,c,b
,我会得到pmd和findbugs关键和阻塞严重性的问题。
如果有人可以给我一个如何应用的一般结构,那将是非常棒的。
感谢。
答案 0 :(得分:3)
也许你宁愿让用户指定更详细的标志,比如这个?
python script.py --checker p --checker f --level c --level b
如果是,您可以使用追加
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--checker', action='append')
>>> parser.add_argument('--level', action='append')
然后你得到一个参数检查器和级别,作为迭代的列表。
如果你真的想使用组合标志:
for c in arg1:
run_checker(c, arg2)
假设您只是以某种方式将严重性级别传递给检查程序。
答案 1 :(得分:2)
如果参数中存在每个选项,您可以尝试设置布尔标志:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("pcf", help="pmd, checkstyle, or findbug")
parser.add_argument("mcb", help="major, critical, and blocker")
args = parser.parse_args()
# Use boolean flags
pmd = 'p' in args.pcf
checkstyle = 'c' in args.pcf
findbug = 'f' in args.pcf
major = 'm' in args.mcb
critical = 'c' in args.mcb
blocker = 'b' in args.mcb
这可以使用python script.py pf cb
。
另外,只是一个有用的提示。如果将以下内容放在python文件的顶部,然后使用chmod +x script.py
使其可执行,则可以直接调用该文件(使用* NIX操作系统):
#!/usr/bin/env python
import argparse
...
现在使用./script.py pf cb
投放,或者甚至将其放在您的路径中并致电script.py pf cb
答案 2 :(得分:1)
https://stackoverflow.com/users/1401034/ewan是一个很好的解决方案。但略有不同的变化为用户提供了更多选择,并且可能更清晰。
parser = argparse.ArgumentParser()
parser.add_argument('-p', '--pmd', action='store_true')
parser.add_argument('-c', '--checkstyle', action='store_true')
parser.add_argument('-f', '--findbug', action='store_true')
parser.add_argument('-m', '--major', action='store_true')
parser.add_argument('-d', '--critical', action='store_true')
parser.add_argument('-b', '--blocker', action='store_true')
args = parser.parse_args()
print args
样品运行:
1840:~/mypy$ python2.7 stack24265375.py -cfmd
Namespace(blocker=False, checkstyle=True, critical=True, findbug=True, major=True, pmd=False)
1841:~/mypy$ python2.7 stack24265375.py -h
usage: stack24265375.py [-h] [-p] [-c] [-f] [-m] [-d] [-b]
optional arguments:
-h, --help show this help message and exit
-p, --pmd
-c, --checkstyle
-f, --findbug
-m, --major
-d, --critical
-b, --blocker
1842:~/mypy$ python2.7 stack24265375.py --critical --major
Namespace(blocker=False, checkstyle=False, critical=True, findbug=False, major=True, pmd=False)
在这种情况下,有6个可选的布尔标志。简短的单字母版本可以任意组合串联在一起。除了必要的'-'
之外,此表单看起来就像使用2个位置参数的表单。但它们可以任意组合混合和匹配。长篇形式是自我记录。
如果将这6个参数分成2个参数组,则帮助显示可能会更清晰。
parser = argparse.ArgumentParser()
group1 = parser.add_argument_group('issue')
group1.add_argument('-p', '--pmd', action='store_true')
group1.add_argument('-c', '--checkstyle', action='store_true')
group1.add_argument('-f', '--findbug', action='store_true')
group2 = parser.add_argument_group('severity')
group2.add_argument('-m', '--major', action='store_true')
group2.add_argument('-d', '--critical', action='store_true')
group2.add_argument('-b', '--blocker', action='store_true')
args = parser.parse_args()
print args
帮助:
usage: stack24265375.py [-h] [-p] [-c] [-f] [-m] [-d] [-b]
optional arguments:
-h, --help show this help message and exit
issue:
-p, --pmd
-c, --checkstyle
-f, --findbug
severity:
-m, --major
-d, --critical
-b, --blocker