Python 获取命令行参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011520181/article/details/79955927

一、sys 模块

在 Python 中,通过 sys 模块中的 sys.argv 可以访问到所有的命令行参数,它的返回值是包含所有命令行参数的列表。

  • sys.argv :是命令行参数列表

  • len(sys.argv) :是命令行参数个数

  • sys.argv[0]:参数1

  • sys.argv[1]:参数2

实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@Time    : 2018-04-11 17:58
@Author  : jianjun.wang
@Email   : alanwang6584@gmail.com
"""

import sys

def main():
    print 'arg num : ', len(sys.argv)
    print 'args : ', sys.argv
    print 'script name : ', sys.argv[0]

    for i in range(len(sys.argv)):
        print "arg[{0}] = {1}".format(i, sys.argv[i])

if __name__ == "__main__":
    main()

命令行中输入:python D023_get_arg_sys.py alan 3

输出

arg num :  3
args :  ['D023_get_arg_sys.py', 'alan', '3']
script name :  D023_get_arg_sys.py
arg[0] = D023_get_arg_sys.py
arg[1] = alan
arg[2] = 3

二、getopt 模块

有时候我们需要传递多个参数,每个参数表示不同的含义,而且有时候有的参数有,有的参数没有。比如我们需要从打点文件(file)中分析某国家(country)某个版本(version)的统计结果,可以看到这里有四个参数:脚本名、file、country、country,但有时可能从文件中查某版本的(只有 脚本名、file、version 参数),或查某国家的(脚本名、file、country 参数),这时用 sys 模块就比较麻烦了,因为,第三个参数有可能是 country、也可能是 version,也可能都没有(如分析该文件中所有国家所有版本的数据)。这时用 getopt 就可以很好的解决这个需求。

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

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

getopt.getopt 方法

getopt.getopt 方法用于解析命令行参数列表,语法格式如下:

options, args = getopt.getopt(args, shortopts, longopts=[])

方法参数说明:

  • shortopts:短格式参数串。shortopts 后的冒号(:)表示如果设置该选项,必须有附加的参数,不带冒号表示该选项没有附加参数如:"h f: v:"h 后面没有冒号,表示该选项没有附加参数,如用于输出命令用法f 和 v 后面带有冒号,表示该选项有附加参数

  • longopts:长格式参数列表。longopts 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就没有附加参数如:["help", "file=", "version="]help 后面没有等号,表示该选项没有附加参数file 和 version 后面带冒号,表示如果设置该选项,必须有附加参数

  • longopts: 以列表的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。

  • 返回值含义options:元组列表,每个元组的形式为:(选项, 附加参数),如:('-f', 'data.csv')args:包含那些没有 '-' 或 '--' 的参数列表

  • 异常: getopt.GetoptError:在没有找到参数列表,或选项的需要的参数为空时会触发该异常 异常的参数是一个字符串,表示错误的原因,属性 msg 和 opt 为相关选项的错误信息

实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@Time    : 2018-04-11 19:26
@Author  : jianjun.wang
@Email   : alanwang6584@gmail.com
"""

import sys
import getopt

def main(args):
    file=''
    country=''
    version=''

    """
        语法格式:
        options, args = getopt.getopt(args, shortopts, longopts=[])

        参数含义:
        args:要解析的命令行参数列表,sys.argv[1:],过滤掉 sys.argv[0],它是执行脚本的名字,不算命令行参数
        shortopts:短格式参数串。shortopts 后的冒号(:)表示如果设置该选项,必须有附加的参数,不带冒号表示该选项没有附加参数
                如:"hf:v:"
                h 后面没有冒号,表示该选项没有附加参数,如用于输出命令用法
                f 和 v 后面带有冒号,表示该选项有附加参数
        longopts:长格式参数列表。longopts 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就没有附加参数
                如:["help", "file=", "version="]
                help 后面没有等号,表示该选项没有附加参数
                file 和 version 后面带冒号,表示如果设置该选项,必须有附加参数

        返回值含义:
        options:元组列表,每个元组的形式为:(选项, 附加参数),如:('-f', 'data.csv')
        args:包含那些没有 '-' 或 '--' 的参数列表

        异常: 
        getopt.GetoptError:在没有找到参数列表,或选项的需要的参数为空时会触发该异常
        异常的参数是一个字符串,表示错误的原因,属性 msg 和 opt 为相关选项的错误信息

    """
    try:
        options, args = getopt.getopt(args, "hf:c:v:", ["help", "file=", "country=", "version="])
    except getopt.GetoptError:
        print 'Error: get_args.py -f <file> -c <country> -v <version>'
        print '   or: get_args.py --file=<file> --country=<country> --version=<version>'
        sys.exit(2)

    for opt, arg in options:
        if opt in ("-h", "--help"):
            print 'get_args.py -f <file> -c <country> -v <version>'
            print 'or: get_args.py --file=<file> --country=<country> --version=<version>'
            sys.exit()
        elif opt in ("-f", "--file"):
            file = arg
        elif opt in ("-c", "--country"):
            country = arg
        elif opt in ("-v", "--version"):
            version = arg

    for i in range(0, len(args)):
        print "args[{0}] = {1}".format(i, args[i])

    print 'file : ', file
    print 'country : ', country
    print 'version : ', version



if __name__ == "__main__":
    # 注意这里要排除 argv[0],它是本脚本名,不算做命令行参数
    main(sys.argv[1:]) 
短参数测试

命令行中输入:

python D023_get_args_getopt.py -f data.csv -c china -v 6.3.2 a 2

输出:

args[0] = a
args[1] = 2
file :  data.csv
country :  china
version :  6.3.2
长参数测试

命令行中输入:

python D023_get_args_getopt.py --file=data.csv --country=china --version=6.3.2 a 3

输出:

args[0] = a
args[1] = 3
file :  data.csv
country :  china
version :  6.3.2

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页