【发布时间】:2013-10-09 14:43:05
【问题描述】:
如果我的术语不正确,请原谅我,但我正在寻找一种将子解析器添加到可选 argparse 参数的方法,每个 args 上都有 store_true 标志。
理想情况下,我想使用以下语法在 shodan_parser 子解析器中引用 --html 的布尔值:
if args.shodan.html:
print("Doing a thing")
parser = argparse.ArgumentParser()
parser.add_argument("-r", "--reverse-dns", help="rDNS on host", action="store_true")
parser.add_argument("-s", "--shodan", help="perform SHODAN query on discovered IPs", action="store_true")
parser.add_argument("targets", help="IPv4 addresses to search for", nargs="+")
subparsers = parser.add_subparsers()
shodan_parser = subparsers.add_parser("shodan", help="SHODAN options")
shodan_parser.add_argument("--html", action="store_true")
shodan_parser.set_defaults(which='shodan')
输出:
(venv)[nott@admin gumdrop]$ python gumdrop.py google.ca --shodan --html
usage: gumdrop.py [-h] [-r] [-e] [-s] targets [targets ...] {shodan} ...
gumdrop.py: error: too few arguments
(venv)[nott@admin gumdrop]$ python gumdrop.py --shodan --html google.ca askjeeves.ca
usage: gumdrop.py [-h] [-r] [-e] [-s] targets [targets ...] {shodan} ...
gumdrop.py: error: invalid choice: 'askjeeves.ca' (choose from 'shodan')
有什么建议吗?
【问题讨论】:
-
Python 2 对吗?您能否根据您计划提供的命令行参数发布预期的输出?
-
我不确定您所说的预期输出是什么意思。我希望能够为
shodan.html设置一个布尔标志,但我不确定这是否可能。 -
你能提供一个你想输入的命令行参数的例子吗?
-
python module.py --shodan -h它可能会变得一团糟。我不确定我还能如何处理它。 -
请注意,您将无法执行 -h 因为它与 argparse 默认值 -h 冲突以寻求帮助。所以你必须做--html。
标签: python python-2.7 command-line-arguments argparse