设为首页 收藏本站
查看: 1283|回复: 0

[经验分享] python 命令行参数解析

[复制链接]

尚未签到

发表于 2017-4-26 13:14:47 | 显示全部楼层 |阅读模式
本文是从我另一个博客转载过来的,欢迎大家点击进去看一下,帮我增加点人气^_^

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
输出如下:

[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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369600-1-1.html 上篇帖子: Python--遍历+合并目录 下篇帖子: python学习资料整理(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表