复用代码Python接收命令行参数:argparse模块

Posted 南瓜__pumpkin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复用代码Python接收命令行参数:argparse模块相关的知识,希望对你有一定的参考价值。

概述

以前简单探索过命令接收模块,地址 Python接收命令行参数的3种方法

准备写软件,看了 SQLMap lib/parse/cmdline.py 接收命令的代码如下,看了 argparse中文官方文档,先简单探探路。

def cmdLineParser(argv=None):
    """
    This function parses the command line parameters and arguments
    """

    if not argv:
        argv = sys.argv

    checkSystemEncoding()

    # Reference: https://stackoverflow.com/a/4012683 (Note: previously used "...sys.getfilesystemencoding() or UNICODE_ENCODING")
    _ = getUnicode(os.path.basename(argv[0]), encoding=sys.stdin.encoding)

    usage = "%s%s [options]" % ("%s " % os.path.basename(sys.executable) if not IS_WIN else "", "\\"%s\\"" % _ if " " in _ else _)
    parser = ArgumentParser(usage=usage)

    try:
        parser.add_argument("--hh", dest="advancedHelp", action="store_true",
            help="Show advanced help message and exit")

        parser.add_argument("--version", dest="showVersion", action="store_true",
            help="Show program's version number and exit")

        parser.add_argument("-v", dest="verbose", type=int,
            help="Verbosity level: 0-6 (default %d)" % defaults.verbose)

参数说明

参考:argparse中文官方文档

命名空间对象

使用 vars()函数 返回对象object的属性和属性值的字典对象。

args = parser.parse_args()  # 获取参数对象
print(args)					# Namespace(file='x', showVersion=False)
param_dict = vars(args)		# 把命名空间对象转换成字典对象

复用函数

定义了一个接收命令行参数的函数,对输出的提示信息进行了解耦。

def check_params(param_list):
    # 自定义打印信息
    type = param_dict['file'][param_dict['file'].find(".") + 1:]
    if type != "doc" or type != "docx":
        print(u"程序中断: 请输入.dox或.docx文件")
        exit(1)

    if param_dict['showVersion']:
        print(u"版本:1.0 只接收 -f 和 -v 两个参数,对整个word文档添加漏洞描述、危害、证明、加固等信息")


def shell_accept():
    '''
    预定义命令行参数,接收并存储
    必须参数:file
    可选参数:
    -f / --file
    -v / --version
    @return:返回获取到的命令行参数args,以数据字典格式
    '''
    try:    # 异常处理
        parser = argparse.ArgumentParser(description="传入命令参数")
        parser.add_argument("-f", "--file", type=str, help="待处理的word文档", required=True)

        parser.add_argument("-v", "--version", dest="showVersion", action="store_true",
                            help="工具版本号")

        args = parser.parse_args()  # 获取命名空间对象
        param_dict = vars(args)     # 把命名空间对象转换成字典对象
        check_params(param_dict)
        
        return param_dict
    except Exception as e:
        print(e)

以上是关于复用代码Python接收命令行参数:argparse模块的主要内容,如果未能解决你的问题,请参考以下文章

Python 杂记:argparse 模块

Python语言命令行参数解析接收参数执行脚本的三种方法

Python接收命令行参数的3种方法

在 python 中调试 argpars

python argpare 模块的简单用法

怎样才能让python 脚本像shell命令一样直接运行并可以接收参数