python argparse 带多于的参数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python argparse 带多于的参数问题相关的知识,希望对你有一定的参考价值。

我想这样用:
python *.py -a 1 -b 2 dada.file afasfa.file fdgdgdf.file ...
其中 -a -b是argparse 的参数,但是dada.file afasfa.file fdgdgdf.file ... 是程序后面运行时带的其它参数,没有在argparse 里面定义,有方法实现吗?

参考技术A

可以使用OptionParser进行解析。

def main():
    from optparse import OptionParser
    optParser = OptionParser()
    optParser.add_option("-a","--a", type="string",dest = "a")
    optParser.add_option("-b","--b", type="string",dest = "b")
    options, args = optParser.parse_args()
    print options.a
    print options.b
    print options
    print args
if __name__ == '__main__':
    main()

运行

>python pythontest.py -a 1 -b 2 dada.file afasfa.file fdgdgdf.file

输出结果为

1
2
'a': '1', 'b': '2'
['dada.file', 'afasfa.file', 'fdgdgdf.file']

是否可以在 python3 的 argparse 中添加“-”标志?

【中文标题】是否可以在 python3 的 argparse 中添加“-”标志?【英文标题】:Is it possible to add '-' flag in argparse of python3? 【发布时间】:2020-12-29 19:19:12 【问题描述】:

dnsgen 等工具适用于这两种类型的选项: 没有任何参数:cat domains.txt | dnsgen - | someotherprogram 带参数:dnsgen -w wordlist filename.txt

我可以让我的程序使用- 不带参数,即dnsgen - 样式。假设我的代码是这样的,它可以从标准输入和 wordlist 接收数据

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-w', '--wordlist', help="Wordlist")
argv = parser.parse_args()
my_awesome_function(argv.wordlist)

所以,我的代码只能从 wordlist 中读取。如何通过 wordlist 和 stdin 使用 - 参数样式进行此操作?

【问题讨论】:

【参考方案1】:

可能不是一个优雅的解决方案,但是,您可以分配一个虚拟变量并将其设为store_true,如下所示。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-', "--_", action='store_true')
parser.add_argument('-w', '--wordlist', help="Wordlist")
argv = parser.parse_args()
my_awesome_function(argv.wordlist)

【讨论】:

以上是关于python argparse 带多于的参数问题的主要内容,如果未能解决你的问题,请参考以下文章

python argparse命名位置参数?

python中的argparse模块怎么参数传递

python命令行参数模块argparse

Python 处理脚本的命令行参数:使用argparse

python中的argparse包——用于解析命令行参数

Python命令行参数处理之argparse模块