python 命令行参数解析

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

ImPyy

选择模块

根据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

输出如下:

[[email protected] 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
[[email protected] 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)

输出如下:

[[email protected] test]$ python t2.py 1 2 3 -f float
Input: [1, 2, 3]
Result:
    sum:        6.000000
[[email protected] 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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 04:01:30

python 命令行参数解析的相关文章

【Python 命令行参数解析: optparse 模块】

大家在使用Python进行脚本开发时,经常需要通过终端交互的方式对Python的脚本模块进行调用.这时在 Python模块中提供基础的命令行参数支持是必不可少的.那么,在Python中我们如何实现命令行参数的传入和解析呢,如下内容将对此进行简要的介绍. Python对命令行参数解析的支持 Python中通过两个内建模块对命令行参数解析进行支持:getopt 和 optparse 两种内置支持 模块名 功能说明 getopt 对命令行参数进行简单的处理 optparse 能够对命令行参数进行复杂的

python 命令行参数解析 argparse简单分析

在python 2.7 后,不推荐使用 optparse, 而推荐使用 argparse. 其它的不多说,简单的分析下我遇到的问题:我是想用 argparse 来解析不定长的命令行参数 例如: import argparse import sys parser = argparse.ArgumentParser(description='test parsing arguments') parser.add_argument('pos1', nargs='*') parser.add_argum

python 命令行参数解析学习

argparse模块  参数好多,对这个不熟悉,不太懂命令行,很少用,先抄点说明,慢慢看着理解. 用于解析命令行选项和参数的标准模块. 使用步骤: 1: import argparse #导入模块 2: parser = argparse.ArgumentParser() #创建解析对象 3: parser.add_argument() #向该对象中添加使用到的命令行选项和参数 4: parser.parser_args() #解析命令行 ============================

python命令行参数解析实例

闲言少述,直接上代码 ?? ?#!/usr/bin/env python # # ? import json import getopt, sys def usage(): print sys.argv[0] + ' -i irt -s status' print sys.argv[0] + ' -i irt -n seg -t stime' print sys.argv[0] + ' -h # get help info' def parse_cmd_line_param(): try: op

Python 中命令行参数解析工具 docopt 安装和应用

什么是 docopt? 1.docopt 是一种 Python 编写的命令行执行脚本的交互语言. 它是一种语言! 它是一种语言! 它是一种语言! 2.使用这种语言可以在自己的脚本中,添加一些规则限制.这样脚本在执行的时候就必须按照这样格式来执行,同时,也可以很方便的编写一些帮助信息(其实很多软件在输入 -h 的时候显示信息 .例如 python -h ,会显示所有的 python 指令,并且页通过 docopt 限制了 python 指令的格式),下面是一些简单的例子: docopt 的安装 d

Python命令行参数

Python命令行参数: -d 在解析时显示调试信息 -O 生成优化代码 ( .pyo 文件 ) -S 启动时不引入查找Python路径的位置 -v 输出Python版本号 -X 从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd 执行 Python 脚本,并将运行结果作为 cmd 字符串. file 在给定的python文件执行python脚本.

第5章4节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 命令行参数解析(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在所难免.有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息. 设置好Monkey的CLASSPATH环境变量以指定"/system/framework /framework/monkey.jar"后,/system/bin/monkey这个shell脚本就会通

PHP 命令行参数解析工具类

<?php /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 private static $shortOptVal = null; // options value private static $optsArr = array(); // command args private static $argsArr = array(); // 是否已解析过命令行参数 private static

C#命令行参数解析类以及使用实例

http://blog.csdn.net/jackxinxu2100/article/details/6642694 编写命令行程序时如何进行命令行参数解析至关重要,下面将引用codeproject里面的一个命令行参数解析类并阐述如何使用来说明C#命令行参数解析的过程. 先看参数解析类,分为CommandLine类以及CommandArgs类,前者负责解析,后者负责结果封装,解析的结果分为三类:即 a=b 对应的key/value类型,-a b 对应的option与option value(可省