一、sys.argv

Python解析命令行读取参数有两种方式:sys.argv和argparse

如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。

import sys
print(“输入的参数为:%s” % sys.argv[1])

命令行执行效果:

python demo.py 1
输入的参数为:1

二、 python 解析命令行参数optparse(已过时,不推荐使用)

Python 有两个内建的模块用于处理命令行参数:
一个是 getopt只能简单处理 命令行参数;
另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。会自动帮你负责-h帮助选项。

基本用法

首先你必须导入该类,并创建一个OptionParser对象,然后再使用parser.add_option(…)待定义命令行参数

optparse模块OptionParser

三、python argparse 用法总结

【推荐】Python-argparse命令解析模块详解与代码展示
参考URL: https://blog.csdn.net/lady_killer9/article/details/115470174

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。

argparse使用demo

【推荐】Python-argparse命令解析模块详解与代码展示
参考URL: https://blog.csdn.net/lady_killer9/article/details/115470174

import argparse # 导入模板
parser = argparse.ArgumentParser() # 创建parser
parser.add_argument() # 添加参数
args = parser.parse_args() # 参数解析

demo

"""
-*- coding:utf-8 -*-
@File: learnarg.py
@Author:frank yu
@DateTime: 2021.04.06 20:45
@Contact: frankyu112058@gmail.com
@Description:
"""
import argparse
from itertools import permutations
 
parser = argparse.ArgumentParser(description='a demo to learn argparse by lady_killer.')
# ----------------------- 位置参数 -----------------------
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
 
# --------选项参数,一个选项一个值(存在为sum函数,不存在为max函数)----------------
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')
 
# -------------------- 一个选项多个值,放到列表 ---------------------
parser.add_argument("-per", "--per", dest='permutations', default=[], nargs='+', help="permutations of the integers")
 
# ------------------ 选项必须存在,required参数 ---------------------
parser.add_argument("-min", "--mini", dest="min", default=[], nargs='+', required=True, help="minimum of the "
                                                                                             "integers,must exist")
 
# -------------------- 参数在范围内,choices参数 --------------------
parser.add_argument("-num", "--number", dest="num", type=int, default=1, choices=[x for x in range(10)],
                    help="a integer,0<=num<=9")
 
# -------------------- 参数组 --------------------
v_group = parser.add_argument_group("v_group", "about version and verose")
v_group.add_argument("--version", action='store_true', dest="show_version", help="show the version")
v_group.add_argument("-v", dest="verbose", default=1, type=int, choices=[1, 2, 3, 4], help="show more information, 1~4")
 
csdn = parser.add_mutually_exclusive_group(required=True)
csdn.add_argument("--like", action='store_true', dest="like", help="love csdn")
csdn.add_argument("--hate", action='store_true', dest="hate", help="hate csdn")
 
# ------------- 解析参数 -----------------------
args = parser.parse_args()
 
# -------------- 解析结果查看 --------------------
# print(dir(args))
print(args.__dict__)
 
# ------------- 位置参数显示 --------------------
print("位置参数:", args.integers)
 
# ------------ 选项参数 显示 --------------------
print("选项参数使用:", args.accumulate(args.integers))
 
# ----------- 选项参数,一个参数多个值 ----------
print("一个选项多个值:", [x for x in permutations(args.permutations)])
 
# ------------------ 必填选项 --------------
print("必填选项,最小值:", min(args.min))
 
# ------------ 范围限制选项 ---------------
print("范围限制选项,参数值:", args.num)
 
# ------------- 参数组 -------------------
if args.show_version:
    print("v1.0")
if args.verbose > 1:
    print("you will get more information")
 
# ----------- 互斥参数组 ------------------
if args.like:
    print("I like CSDN")
if args.hate:
    print("I hate CSDN")

查看学习sqlmap相关代码

源码路径:lib/parse/cmdline.py

它在try优先导入了optparse ,并重名了相关方法和argparse 的方法一样,如果导入 optparse 失败,就直接使用了 argparse。这样做的好处,代码兼容性吧,缺失optparse 的情况下,代码还可以运行。

try:
    from optparse import OptionError as ArgumentError
    from optparse import OptionGroup
    from optparse import OptionParser as ArgumentParser
    from optparse import SUPPRESS_HELP as SUPPRESS

    ArgumentParser.add_argument = ArgumentParser.add_option

    def _add_argument_group(self, *args, **kwargs):
        return self.add_option_group(OptionGroup(self, *args, **kwargs))

    ArgumentParser.add_argument_group = _add_argument_group

    def _add_argument(self, *args, **kwargs):
        return self.add_option(*args, **kwargs)

    OptionGroup.add_argument = _add_argument

except ImportError:
    from argparse import ArgumentParser
    from argparse import ArgumentError
    from argparse import SUPPRESS
...

不推荐这么玩了,直接用argparse即可。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐