Python命令行参数处理

来源:互联网 发布:电力电子技术知乎 编辑:程序博客网 时间:2024/05/21 10:24

日常工作中,编写Python脚本时,时常会遇到需要从命令行中传递一些参数到Python程序中,Python程序根据参数值进行相应的处理。本文简要介绍一下Python脚本中如何获得命令行传递来的参数,以及如何解析和处理它们。

sys.argv

解析Python中命令行参数的最传统的方法是通过sys.argv

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

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

  • sys.argv[0] 表示脚本名

示例

#!/usr/bin/python# -*- coding: UTF-8 -*-import sysprint '参数个数为:', len(sys.argv), '个参数。'print '参数列表:', str(sys.argv)

执行输出结果为:

$ python test.py arg1 arg2 arg3参数个数为: 4 个参数。参数列表: ['test.py', 'arg1', 'arg2', 'arg3']


这种方法比较简单,但灵活性较差,且解析出来的参数都是str类型。编写单数较少且固定的脚本时使用比较方便。

argparse

argparse模块是Python内置的参数解析模块,相比sys.argv功能更强大、也更加灵活,使用起来也并不复杂。

使用步骤如下:

第一步:创建ArgumentParser对象

import argparseparser = argparse.ArgumentParser(description='Description of the program') #description为可选参数

ArgumentParser支持更多可选参数,具体可以参考:https://docs.python.org/2/library/argparse.html#argumentparser-objects

第二步:添加选项和参数

parser.add_argument("--targetEnv",default = 'TEST', type=str, choices = ['TEST','PROD'],help="想要运行测试用例的环境,可选值[TEST,PROD]")parser.add_argument("--urlPrefix",default = 'http://127.0.0.1:8908/',type=str, help = "日志文件的下载url前缀————Jenkins运行时需要")

第三步:解析和处理参数

args = parser.parse_args()env = args.targetEnv

argparse可以做的事情:

自动生成help文档。

如上文所述Python脚本文件命名为py_run.py后执行--help的结果如下截图

add_argument支持对参数的灵活配置

ArgumentParser.add_argument(name or flags...[action][nargs][const][default][type][choices][required][help][metavar][dest])

  • name or flags - 选项字符串的名字或者列表,例如foo(name) 或者 -f,--foo(flag).
  • action - 命令行遇到参数时的相应动作,默认是store
  • nargs - 应该读取的命令行参数个数。
  • const - 某些action和nargs所需要的常量值。
  • default - 未指定参数时设置的默认值。
  • type - 命令行参数被转换成的类型。
  • choices - 参数合法取值的容器。
  • required - 参数是否可以缺省(仅针对可选参数——argparse默认flags(-f,--foo这种)代表的是可选参数,即可以在命令行中省略,如果想要设置这种参数为必选,设置required=True即可。.
  • help - 对参数的简要说明。
  • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称。
  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线。

关于每个参数的详细说明,请查阅https://docs.python.org/2/library/argparse.html#the-add-argument-method

参考资料

http://www.runoob.com/python/python-command-line-arguments.html

https://docs.python.org/2/library/argparse.html#argumentparser-objectshttps://docs.python.org/2/library/argparse.html