【复用代码】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)

猜你喜欢

转载自blog.csdn.net/soldi_er/article/details/121292438