介绍python获取命令行参数的方法:sys、getopt和argparse模块。

sys(简单场景)

获取脚本传递的所有参数,返回一个列表。列表中的所有元素均为脚本传递的参数。

sys.argv[0] # 脚本传递的第一个参数,固定为脚本名称,可以通过次方式获得脚本名称

可以使用索引依次获得脚本传递的其他参数

import sys

print('第一个参数:%s' % sys.argv[0])

if sys.argv[1].startswith('-'):
    c1 = sys.argv[1][1:]

    print(c1)
在这里插入图片描述

getopt(了解)

# encoding=utf-8

import getopt
import sys


def main(argv):
    try:
        options, args = getopt.getopt(argv, "hp:i:", ["help", "ip=", "port="])
    except getopt.GetoptError:
        sys.exit()

    for option, value in options:
        if option in ("-h", "--help"):
            print("help")
        if option in ("-i", "--ip"):
            print("ip is: {0}".format(value))
        if option in ("-p", "--port"):
            print("port is: {0}".format(value))

    print("error args: {0}".format(args))


if __name__ == '__main__':
    main(sys.argv[1:])
在这里插入图片描述

argparse(复杂场景)

关键字 简介
name or flags 参数名或者”-/–”开头的选项,例如foo或者-f, --foo
action 匹配到选项后的行为
nargs 选项跟随的参数个数
const 在某些actionnargs下,使用的固定值
default 默认值
type 参数类型
choices 可选的参数值范围
required 选项必选or可选
help 参数描述
metavar 使用说明中显示的参数名
dest 选项最终在解析结果对象中的名字
# encoding=utf-8
import argparse


def main(args):
    print("--address {0}".format(args.code_address))  # args.address会报错,因为指定了dest的值
    print("--flag {0}".format(args.flag))  # 如果命令行中该参数输入的值不在choices列表中,则报错
    print("--port {0}".format(args.port))  # prot的类型为int类型,如果命令行中没有输入该选项则报错
    print("-l {0}".format(args.log))  # 如果命令行中输入该参数,则该值为True。因为为短格式"-l"指定了别名"--log",所以程序中用args.log来访问


if __name__ == '__main__':
    parser = argparse.ArgumentParser(usage="it's usage tip.", description="help info.")
    parser.add_argument("--address", default=80, help="the port number.", dest="code_address")
    parser.add_argument("--flag", choices=['.txt', '.jpg', '.xml', '.png'], default=".txt", help="the file type")
    parser.add_argument("--port", type=int, required=True, help="the port number.")
    parser.add_argument("-l", "--log", default=False, action="store_true", help="active log info.")

    args = parser.parse_args()
    main(args)
在这里插入图片描述