如果我的术语是关闭的,请原谅,但是我正在寻找一种方法来向可选的argparse参数添加一个subparser,并在每个参数上使用store_true
标志。在
理想情况下,我希望使用以下语法来引用shodan_parser
子parser中--html
的布尔值:
if args.shodan.html:
print("Doing a thing")
输出:
(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')
有什么建议吗?在
从“h”切换到“需要帮助”,因为“h”已经被使用了
{cder>与此子名称^有什么关系?它的目的是什么?你是不是把旗子和副手搞混了?在
助理也是一个职位。同时使用带
^{pr2}$nargs='+'
的位置和子parser可能有效,但可能会导致混淆。targets
列表何时结束,子parser(及其参数)何时开始?在你的产出
我猜这集
targets=['google.ca']
,shodan=True
。但你还没有给它下一个次级命令。html
是未知的。在现在设置
shodan=True
(主解析器标志)。同样,html
是未知的。它设置target=['google.ca']
。但现在它试图将askjeeves.ca
解释为一个子parser命令。但它与可用的选择不匹配。在我想这几行行行得通:
我建议你不要再犯了。这只是让你和你的用户感到困惑。继续并在主解析器中包含
html
。它是可选的,所以可以随意使用或忽略它。如果您必须使用子参数,请查看文档,并尝试一些更简单的示例。在至于获取
args.shodan.html
,这是一个更高级的问题,涉及名称空间的嵌套。现在,如果你得到args.html
,那就高兴吧。在相关问题 更多 >
编程相关推荐