python 解析命令行读取参数,在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数。

万能的python自带了sys.arg、argparse、optparse模块等,使读取命令行参数变得简单而规范。

sys.argv

   解释:就是一个从程序外部获取参数的桥梁,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv可以看作是一个列表,所以才用[]提取其中的元素。 第一个元素是程序本身,后续的才依次是外部给与的参数。

   1. sys.argv 是命令行参数列表

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

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

4. 注意参数顺序

实例

import sys

print(sys.argv)  #['test_argv.py', 'hello', 'python']
print(len(sys.argv)) #3
print('第一个参数',sys.argv[0]) test_argv.py

执行命令:

python 脚本名称  params  params1

argparse模块

1) 一般模式

    大多数情况下,脚本很可能需要多个参数,而且每次参数的类型用处各不相同,那么这个时候在参数钱添加标签表明参数的类型和用途十分有用,而利用argparse模块可以方便的实现这一目的。举例如下:

import argparse
parser = argparse.ArgumentParser(description="your script description")
parser.add_argument("-unit", help="increase output verbosity",nargs="?")
args = parser.parse_args() if args.unit:
print('unit 存在')
else:
print('unit is none', args.unit)

运行 python argp.py 后面跟 -unit / -u 时,例如: python argp.py -u hello 会输出hello ;

若直接运行 python argp.py -u 会输入None;

若输入-unit / -u 之外的参数会报错: argp.py: error: unrecognized arguments: -r

若不加 nargs = "?",直接输入python argp.py -u ,会报错: argp.py: error: argument -unit: expected one argument,说明加了-unit,后面必须要传参数;

nargs="?"表示参数可以输入0或者1个;Jenkins构建时,若参数为非必填参数,可能会需要添加改配置;

2)必需参数

这种模式用于确保某些必需的参数有输入。

parser.add_argument('--unit', required=True, type=int)

required标签就是说--unit参数是必需的,并且类型为int,输入别的类型会报错。

3) 位置参数

位置参数与sys.argv调用比较像,参数没有显示的--xxx或者-xxx标签,因为调用与sys.argv相同。

import argparse
parser = argparse.ArgumentParser(description="your script description")
parser.add_argument('env') # 输入的第一个参数赋予名为env的键
args = parser.parse_args()
print('env is %s'%args.env)

输入 python argp.py test, 输出>>> env is test;

可用nargs参数限定输入的位置参数个数,默认为1.

parser.add_argument('num', nargs=2, type=int)

表示脚本可用读入2个整数赋予num键;

nargs也可以用 '*' 表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;

'+'表示至少读取1个位置参数;

'?'表示该位置参数要么没有,要么只有一个。

4)输入类型

可用type参数指定输入的参数类型,type类型还可以表示文件的操作类型从而直接进行文件的读写操作。

parser.add_argument('file', type=argparser.FileType('r'))    # 读取文件
args = parser.parse_args()
for line in args.file:
print line.strip()

5)参数默认值

一般情况下会设置一些默认参数,从而不需要每次输入某些不需要变动的参数,利用default参数即可实现。

parser.add_argument('filename', default='text.txt')

6)候选参数选择

表示该参数能接受的值只能来自某几个值得候选,除此以外会报错,用choices参数即可。

parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])

参考:https://www.cnblogs.com/arkenstone/p/6250782.html

python argparse例子实践的更多相关文章

  1. python argparse用法总结

    转:python argparse用法总结 1. argparse介绍 argparse是python的一个命令行解析包,非常适合用来编写可读性非常好的程序. 2. 基本用法 prog.py是我在li ...

  2. Python argparse 处理命令行小结

    Python argparse 处理命令行小结 1. 关于argparse是python的一个命令行解析包,主要用于处理命令行参数 2. 基本用法test.py是测试文件,其内容如下: import ...

  3. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  4. paip.复制文件 文件操作 api的设计uapi java python php 最佳实践

    paip.复制文件 文件操作 api的设计uapi java python php 最佳实践 =====uapi   copy() =====java的无,要自己写... ====php   copy ...

  5. Python argparse 模块

    Python argparse 模块 test.py: import argparse argparser = argparse.ArgumentParser(add_help=False) argp ...

  6. python argparse sys.argv

    python argparse sys.argv class WeiLearningArgumentParser(argparse.ArgumentParser): def __init__(self ...

  7. [Spark][Python]groupByKey例子

    Spark Python 索引页 [Spark][Python]sortByKey 例子 的继续: [Spark][Python]groupByKey例子 In [29]: mydata003.col ...

  8. [Spark][Python]sortByKey 例子

    [Spark][Python]sortByKey 例子: [training@localhost ~]$ hdfs dfs -cat test02.txt00002 sku01000001 sku93 ...

  9. python - argparse 模块学习

    python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...

随机推荐

  1. 用js刷剑指offer(二叉搜索树与双向链表)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { ...

  2. 链表(python)

    链表1.为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活.链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理. ...

  3. Linux添加shell(.sh)脚本并添加定时任务

    一.添加sheel脚本 1.首先创建一个执行程序:vim a.sh 2.编辑: #!/bin/bash  python3  python.py >> test2.log 2>& ...

  4. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

  5. P2002 消息扩散[SCC缩点]

    题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入格式 第一行两个整数n,m表示n个城市, ...

  6. idea的jdk版本问题

    问题描述: 解决: 检查以上是否版本一致. 不行就再检查下面的: 如果上面的方法还是不行的话,就建议你改一下pom文件中的maven插件编译级别,可以通过搜索所有的pom.xml,1.6这个关键词,就 ...

  7. 《AlwaysRun!》第五次作业:项目需求分析改进与系统设计

     项目 内容 这个作业属于哪个课程 2016级软件工程(西北师范大学) 这个作业的要求在哪里 实验九 团队作业5—团队项目需求改进与系统设计 团队名称 Always Run! 作业学习目标 (1)掌握 ...

  8. POJ1185 炮兵阵地 和 POJ2411 Mondriaan's Dream

    炮兵阵地 Language:Default 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 34008 Accepted ...

  9. ubuntu下新立得(synaptic)软件包管理器安装

    1.从ubuntu下的软件中心(面板主页中输入soft即可找到)搜索安装synaptic后,打开新立得一闪就自动关了.解决办法为: 1.1命令行下卸载,命令行下重新安装: 卸载: #purge表示卸载 ...

  10. Luogu P4198 楼房重建 (李超线段树)

    题目 传送门 题解 首先转化成到(0,0)(0,0)(0,0)的斜率. 那么就是求多少个点是前缀最大值. 做法是线段树,用gao(i,x)gao(i,x)gao(i,x)表示在iii区间内,之前最大值 ...