频道栏目
首页 > 程序开发 > Web开发 > Python > 正文
在Python中如何获取命令行参数?
2018-04-16 10:39:52      个评论    来源:Alan Wang  
收藏   我要投稿

一、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  -c  -v '
    print '  or: get_args.py --file= --country= --version='
    sys.exit(2)

  for opt, arg in options:
    if opt in ("-h", "--help"):
      print 'get_args.py -f  -c  -v '
      print 'or: get_args.py --file= --country= --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
点击复制链接 与好友分享!回本站首页
上一篇:Python推导式(列表、字典、集合推导式)实例讲解
下一篇:python中的垃圾回收机制实例讲解
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站