本文是从我还有一个博客转载过来的,欢迎大家点击进去看一下,帮我添加点人气^_^


选择模块

依据python參考手冊的提示,optparse 已经废弃,应使用 argparse

教程

概念

argparse 模块使用 add_argument 来加入可选的命令行參数,原型例如以下:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
Define how a single command-line argument should be parsed. Each parameter has its own more detailed description below, but in short they are: name or flags - Either a name or a list of option strings, e.g. foo or -f, --foo.
action - The basic type of action to be taken when this argument is encountered at the command line.
nargs - The number of command-line arguments that should be consumed.
const - A constant value required by some action and nargs selections.
default - The value produced if the argument is absent from the command line.
type - The type to which the command-line argument should be converted.
choices - A container of the allowable values for the argument.
required - Whether or not the command-line option may be omitted (optionals only).
help - A brief description of what the argument does.
metavar - A name for the argument in usage messages.
dest - The name of the attribute to be added to the object returned by parse_args().

上面的说明事实上不用看,直接看演示样例好了:

只想展示一些信息

# -*- coding: utf-8 -*-
"""
argparse tester
"""
import argparse parser = argparse.ArgumentParser(description='argparse tester') parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true") args = parser.parse_args() if args.verbose:
print "hello world"

它会输出例如以下:

$ python t.py
$ python t.py -v
hello world
$ python t.py -h
usage: t.py [-h] [-v] argparse tester optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity

这里 -v 是这个选项的简写。--verbose 是完整拼法,都是能够的

help 是帮助信息。不解释了

args = parse_args() 会返回一个命名空间,仅仅要你加入了一个可选项,比方 verbose。它就会把 verbose 加到 args 里去,就能够直接通过 args.verbose 訪问。

假设你想给它起个别名,就须要在 add_argument 里加多一个參数 dest='vb'

这样你就能够通过 args.vb 来訪问它了。

action="store_true" 表示该选项不须要接收參数,直接设定 args.verbose = True,

当然假设你不指定 -v。那么 args.verbose 就是 False

但假设你把 action="store_true" 去掉,你就必须给 -v 指定一个值。比方 -v 1

做个求和程序

# -*- coding: utf-8 -*-
"""
argparse tester
""" import argparse parser = argparse.ArgumentParser(description='argparse tester') parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")
parser.add_argument('numbers', type=int, help="numbers to calculate", nargs='+')
parser.add_argument('-s', '--sum', help="sum all numbers", action='store_true', default=True) args = parser.parse_args() print "Input:", args.numbers
print "Result:"
results = args.numbers if args.verbose:
print "hello world" if args.sum:
results = sum(args.numbers)
print "tSum:tt%s" % results

输出例如以下:

[pan@pan-pc test]$ python t2.py -h
usage: t2.py [-h] [-v] [-s] numbers [numbers ...] argparse tester positional arguments:
numbers numbers to calculate optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
-s, --sum sum all numbers
[pan@pan-pc test]$ python t2.py 1 2 3 -s
Input: [1, 2, 3]
Result:
Sum: 6

注意到这此可选项 numbers 不再加上 “-” 前缀了。由于这个是位置选项

假设把 nargs="+" 去掉,则仅仅能输入一个数字。由于它指定了number 选项的值个数

假设把 type=int 去掉。则 args.numbers 就是一个字符串。而不会自己主动转换为整数

注意到 --sum 选项的最后还加上了 default=True。意思是即使你不在命令行中指定 -s,它也会默认被设置为 True

仅仅能2选1的可选项

# -*- coding: utf-8 -*-
"""
argparse tester
""" import argparse parser = argparse.ArgumentParser(description='argparse tester')
#group = parser.add_mutually_exclusive_group() parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")
parser.add_argument('numbers', type=int, help="numbers to calculate", nargs='+')
parser.add_argument('-s', '--sum', help="sum all numbers", action='store_true', default=True) parser.add_argument('-f', '--format', choices=['int', 'float'], help='choose result format', default='int') args = parser.parse_args() print "Input:", args.numbers
print "Result:"
results = args.numbers if args.verbose:
print "hello world" if args.format == 'int':
format = '%d'
else:
format = '%f' if args.sum:
results = sum(args.numbers)
print 'tsum:tt%s' % (format % results)

输出例如以下:

[pan@pan-pc test]$ python t2.py 1 2 3 -f float
Input: [1, 2, 3]
Result:
sum: 6.000000
[pan@pan-pc test]$ python t2.py 1 2 3 -f double
usage: t2.py [-h] [-v] [-s] [-f {int,float}] numbers [numbers ...]
t2.py: error: argument -f/--format: invalid choice: 'double' (choose from 'int', 'float')

在加入选项 -f 时,传入了 choices=['int', 'float'] 參数。表示该选项仅仅能从 int 或 float 中2选1

python 命令行參数解析的更多相关文章

  1. python命令行參数解析实例

    闲言少述,直接上代码 #!/usr/bin/env python # # import json import getopt, sys def usage():     print sys.argv[ ...

  2. Python命令行參数大全

      -b     :    当转换数组为字符串时提出警告.比方str(bytes_instance), str(bytearray_instance). -B     :    当导入.py[co]文 ...

  3. 第8章2节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-解析处理命令行參数

    MonkeyRunnerStarter是MonkeyRunner启动时的入口类,由于它里面包括了main方法.它的整个启动过程主要做了以下几件事情: 解析用户启动MonkeyRunner时从命令行传输 ...

  4. 命令行參数选项处理:getopt()及getopt_long()函数使用

         在执行某个程序的时候,我们通常使用命令行參数来进行配置其行为.命令行选项和參数控制 UNIX 程序,告知它们怎样动作. 当 gcc的程序启动代码调用我们的入口函数 main(int argc ...

  5. Rust 1.7.0 处理命令行參数

    std是 Rust 标准函数库: env 模块提供了处理环境函数. 在使用标准函数库的时候,使用 use 导入对应的 module . 一.直接输出 use std::env; fn main(){ ...

  6. VS2010中使用命令行參数

    在Linux下编程习惯了使用命令行參数,故使用VS2010时也尝试了一下. 新建项目,c++编敲代码例如以下: #include<iostream> #include<fstream ...

  7. Python命令行选项參数解析策略

    概述 在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口.只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型.所以 ...

  8. python命令行解析模块--argparse

    python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...

  9. Python命令行参数解析模块getopt使用实例

    Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...

随机推荐

  1. 20.发送http请求服务 ($http)

    转自:https://www.cnblogs.com/best/tag/Angular/ 服务从代码直接与服务器进行交互,底层是通过实现,与中http服务从AngularJS代码直接与Web服务器进行 ...

  2. 18.angularJS服务

    转自:https://www.cnblogs.com/best/tag/Angular/ 服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可 ...

  3. POJ 3189 二分+Dinic

    题意: 思路: 二分跨度 枚举最低座次 建图:源点向每头牛连边权为1的边 每头牛向当前枚举的B的区间这段连上边权为1的边 所有座次向汇点连边权为牛棚容量的边 判判流量是不是等于n 一开始写得是直接枚举 ...

  4. Android自定义组件系列【14】——Android5.0按钮波纹效果实现

    今天任老师发表了一篇关于Android5.0中按钮按下的波纹效果实现<Android L中水波纹点击效果的实现>,出于好奇我下载了源代码看了一下效果,正好手边有一个Nexus手机,我结合实 ...

  5. 分享js中的 sort 另一种用法

    // 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft']; // apple排 ...

  6. TwinCAT 3中基于UDP协议通讯的C++实现

    因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...

  7. Mysql学习总结(9)——MySql视图原理讲解与使用大全

    一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...

  8. 通过jQuery的Ajax方式来提交Form表单

    通过jQuery的Ajax方式来提交Form表单 $.ajax({ url:ajaxCallUrl, type:"POST", cache:true, async:false, d ...

  9. js01----json,数组

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  10. 38.C语言字符串总结

    1.自己实现三个常用函数 strlen,strcpy,strstr 自己实现strstr函数,如果找到返回首地址,找不到则返回NULL //查找元素,返回首地址 char *mystrstr(cons ...