在Python中为argparse传递多个选项

2024-05-19 19:18:40 发布

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

我一直在看argparse文档,但我仍然不知道如何使用它。 我编写了一个python脚本,用于在代码分析后从pmd、checkstyle或findbugs获取问题。这些问题也分为严重性,如严重性、阻碍性和关键性。在

所以我想以python script.py arg1 arg2的形式传入两个参数,其中arg1p,c,f的组合,它代表pmd、checkstyle或findbug,arg2是{}的组合,它代表major、critical和blocker。在

例如,如果我在终端中写python script.py pf cb,我会得到pmd和findbugs的严重性和阻塞性问题。在

如果有人能给我一个大概的结构,这将是非常棒的。在

谢谢。在


Tags: 代码文档py脚本参数scriptargparse代表
3条回答

也许您宁愿让用户指定更详细的标志,像这样?在

python script.py  checker p  checker f  level c  level b

如果是这样,可以使用append

^{pr2}$

然后得到一个参数检查器和级别,这两个都作为列表进行迭代。在

如果确实要使用组合标志:

for c in arg1:
    run_checker(c, arg2)

假设您只是以某种方式将严重性级别传递给检查器。在

根据您的规范,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

样本运行:

^{pr2}$

在本例中,有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

如果每个选项都存在于参数中,则可以尝试设置布尔标志:

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操作系统):

^{pr2}$

现在用./script.py pf cb运行,或者甚至把它放在你的路径中并调用script.py pf cb

相关问题 更多 >