python命令行参数

python 处理命令行参数

sys.argv

sys.argv是接受参数的列表,sys.argv[0]表示执行文件名,sys.argv[1:]表示接受的参数

python test.py arg1 arg2 arg3

使用len(sys.argv)来判断是否传入参数,如果len(sys.argv)等于1,表示没有传入参数;如果len(sys.argv) > 1,表示传入了参数,可以使用sys.argv[1:]获取传入的参数。

getopt模块

getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(–)。

该模块提供了两个方法及一个异常处理来解析命令行参数。

getopt.getopt()方法

getopt.getopt(args, options[, long_options])

方法参数说明:

  • args: 要解析的命令行参数列表。
  • options : 以字符串的格式定义,options 后的冒号 : 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
  • long_options : 以列表的格式定义,long_options 后的等号 = 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。
  • 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 的参数。

getopt.gnu_getopt()方法

异常getopt.GetoptError

在没有找到参数列表,或选项的需要的参数为空时会触发该异常。

异常的参数是一个字符串,表示错误的原因。属性 msgopt 为相关选项的错误信息。

实例

helpinfo = "python main.py"
try:
    opts, args = getopt.getopt(sys.argv[1:], 'hi:o:', ['ifile=', 'ofile=', 'help'])
    except getopt.GetoptError as e:
        print(e)


print(opts, args)
if opts == [] and args == []:
    print(helpinfo)
    sys.exit()

    for opt, arg in opts:
        if opt in ('-h', '--help'):
            print(helpinfo)

       	elif opt in ('-i', '--ifile'):
            print(arg)
        elif opt in ('-o', '--ofile'):
            print(arg)

optparse模块

optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,自动生成帮助信息,不需要sys.argv

实例

import optparse

usage="python %prog -u/--user <target user> -p/--password <target password>"
parser=optparse.OptionParser(usage) ## 写入上面定义的帮助信息
parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
parser.add_option('-p','--password',dest='Pwd',type='string',help='target password')
options, args=parser.parse_args()
print('options为', options)
print("用户名为", options.User)
print("密码为", options.Pwd)
print('args为', args)

add_option参数:

  • 可以设置多个选项字符串,比如上面的 ‘-u’, ‘–user’ 这两个,用的时候任选其一
  • dest用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数
  • type用于检测命令行输入参数的数据类型是否符合要求,有 string(字符串)、int(整数)、float(浮点数)等类型
  • help用于定义帮助信息
  • default设置默认值

增加帮助信息分组

import optparse

usage="python %prog -u/--user <target user> -p/--password <target password>"
parser=optparse.OptionParser(usage) ## 写入上面定义的帮助信息
parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
parser.add_option('-p','--password',dest='Pwd',type='string',help='target password')
group = optparse.OptionGroup(parser, 'Debug Options') ## 创建group分组
parser.add_option_group(group)  ## 把创建的组添加到parser中
group.add_option('-d', '--debug', action='store_true', help='Print debug information')
options, args=parser.parse_args()

action有三种类型:

  • action=’store’ 默认类型,可以忽略不写。用户必须给出一个明确的参数值,该类型定义了将实际参数值保存到dest指定变量中
  • action=’store_true’ 用户不需给出参数值,该类型定义了将布尔值true保存到dest指定的变量中(和上面getopt中不加 ‘:’ 、’=’)
  • action=’store_false’ 用户不需给出参数值,该类型定义了将布尔值false保存到dest指定的变量中

获取软件版本

parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")

输出version

python xxx.py --version

或者使用函数

parser.print_version() # 打印版本
print(parser.get_version()) # 返回版本

argparse模块

使用

  1. 新建解释器 argparse.ArgumentParser()
  2. 添加命令 add_argument()
  3. 添加子命令

添加参数

分为添加位置参数-positional arguments和可选参数-optional arguments

# 创建解析器
parse = argparse.ArgumentParser()
# 位置参数,没有前缀
parse.add_argument('foo')
# 可选参数,带有前缀,带’-‘为短参数,带’--‘为长参数
# 可以包含其中一个,也可以两个都包含
parse.add_argument('-r', help="运行")
parse.add_argument('-i', '--init', help='初始化')
parse.add_argument('--show', help='打印信息')
args = parse.parse_args(['boo', '-r', '1', '-i', '2', '--show', '3'])
parse.print_help()  # 打印帮助信息,和传入-h参数效果一些
print(dir(args))  # 打印对象参数
print(args)  # 打印对象
print(args.foo)  # 打印变量值

短参数和长参数

位置变量

可选变量

实例

parse = argparse.ArgumentParser(description='帮助描述信息', prog='%prog', epilog='底部显示信息')
parse.add_argument('-u', '--user', dest='user', type=str, default='root', help='user name')
parse.add_argument('-p', '--password', dest='password', type=str, default='', help='user password')
parse.add_argument('-s', '--sex', dest='sex', type=str, choices=['男', '女'], default='男', help='target sex')
group =parse.add_argument_group(title='foo')
group.add_argument('-n', '--number', dest='Num', nargs=2, required=True, type=int, help='target Two Numbers')
parse.add_argument_group(group)
print(parse.parse_args())

输出结果

usage: %prog [-h] [-u USER] [-p PASSWORD] [-s {男,女}] -n NUM NUM

帮助描述信息

optional arguments:
  -h, --help            show this help message and exit
  -u USER, --user USER  user name
  -p PASSWORD, --password PASSWORD
                        user password
  -s {男,女}, --sex {男,女}
                        target sex

foo:
  -n NUM NUM, --number NUM NUM
                        target Two Numbers

底部显示信息

参考