python从命令行获取参数_Python-解析命令行参数的两中方式

本文介绍了Python中处理命令行参数的两种方式:getopt和argparse。getopt用于简单参数处理,返回一个两元组列表,argparse则提供更复杂的参数管理和帮助文档生成。通过argparse,可以方便地定义参数、设置默认值、指定参数类型,并自动生成帮助信息。示例代码展示了如何使用argparse获取整数列表参数。
摘要由CSDN通过智能技术生成

第一种:getopt

# 第一种方式获取输入参数 - getopt

# opts为分析出的格式信息,是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。

# args为不属于格式信息的剩余的命令行参数。

# eg:python parameter.py -l 1 -c 2 --list 3 5 6

# opts=[(-l,1),(-c,2),(--list 3)] args=[5,6]

# getopt只能处理简单的参数,getopt通过遍历sys.argv里的所有参数,如果'-'开始者认为是短参数

# 类型,截取掉'-'后作为cmd(命令),在取第二个参数为命令的value,'--'同理,然后把cmd,value以

# 一个元组存储,放到opts列表里,不带'-','--'者当着不带格式的参数,然后放到args列表里,使用getopt并不能指定参数的类型。

if 0:

try:

#第一个参数是程序本身 即 parameter.py

print(sys.argv[0])

#解析参数

opts,args = getopt.getopt(sys.argv[1:],'l:t:',["list=","target="])

print(opts)

print(args)

except getopt.GetoptError:

pass

第二种 : argparse

argparse一种方便用户构建命令行参数的接口,知道怎么解析sys.argv参数,也能够自动生成help帮助文档,

使用说明,错误提示等

使用简单步骤:

# 创建argparse解析器实例

parser = argparse.ArgumentParser(

prog='my parameter',

usage='-- test usage',

description = textwrap.dedent('''\

Please do not mess up this text!

--------------------------------

I have indented it

exactly the way

I want it

'''),

epilog='''likewise for this epilog whose whitespace will

be cleaned up and whose words will be wrapped

across a couple lines''',

# '-+',就可以用'-','--','+','++'来添加参数了

prefix_chars='-+',

# 有时,例如在处理特别长的参数列表时,将参数列表保存在文件中而不是在命令行输入它可能是有意义的。

# 如果将fromfile_prefix_chars =参数赋予ArgumentParser构造函数,则以任何指定字符开头的参数将被视为文件,并将被它们包含的参数替换。:

fromfile_prefix_chars='@',

formatter_class=argparse.RawDescriptionHelpFormatter,

argument_default=argparse.SUPPRESS,

# 是否允许长参数

allow_abbrev=True,

#是否添加help参数

add_help= True

)

# 参数说明

# prog - 程序的名称 (default: sys.argv[0],即parameter.py,当然自己可以修改)

# usage - 使用说明 (default: generated from arguments added to parser)

# description - 显示在参数帮助说明前面的描述 (default: none)

# epilog - 显示在参数帮助说明后面的描述 (default: none)

# parents - A由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中。(类似于继承)

# formatter_class - help信息输出的格式

# prefix_chars - 参数前缀, (default: ‘-‘),通过prefix_chars来设置其它前缀,eg:'-+',就可以用'-','--','+','++'来添加参数了

# fromfile_prefix_chars - The set of characters that prefix files from which additional arguments should be read (default: None)

# argument_default - The global default value for arguments (default: None)

# conflict_handler - The strategy for resolving conflicting optionals (usually unnecessary)

# add_help - 添加'-h','--help'到参数中 (default: True)

# allow_abbrev - Allows long options to be abbreviated if the abbreviation is unambiguous. (default: True)

添加参数 - 从命令行获取一个整数列表

parser.add_argument('-l','--list',dest='list',metavar='N',nargs='+',help='get int list')

# parser.add_argument('list',metavar='N',nargs='+',help='get int list') (不带'-'写法)

# add_argument有两个可变长参数:*args, **kwargs,* 表示接收的参数作为元组来处理,** 接收的参数作为字典来处理

# *args = ('-l','--list') **kwargs = {'dest':'list','metavar':'N','nargs':'+','help':'get int list'}

# 参数说明

# name or flags - 一个名字或者是一个列表,表示了选择参数, e.g. foo or -f, --foo.(parser.add_argument('-f', '--foo'))

# action - 读取的参数中出现指定参数的时候的行为(默认值是 store。)

# store_const,表示赋值为const;

# append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;

# append_const,将参数规范中定义的一个值保存到一个列表;

# count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

# nargs - 应该从命令后读取的参数的数量

# 类似正则表达式

# OPTIONAL = '?'

# ZERO_OR_MORE = '*'

# ONE_OR_MORE = '+' 只是读取一个参数

# PARSER = 'A...'

# REMAINDER = '...'

# _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'

# const - 保存一个常量

# default - 不指定参数时的默认值。

# type - 命令行参数应该被转换成的类型。

# choices - 参数可允许的值的一个容器。

# required - 可选参数是否可以省略 (仅针对可选参数)。

# help - 帮助说明

# metavar - 帮助信息中显示的参数名称

# dest - 参数的key,用来获取具体的参数值.

解析参数

# -----fromfile_prefix_chars

# with open('args.txt', 'w') as fp:

# fp.write('-f\nbar')

# parser = argparse.ArgumentParser(fromfile_prefix_chars='@')

# parser.add_argument('-f')

# parser.parse_args(['-f', 'foo','@args.txt'])

# argf = parser.parse_args()

# print(argf)

# -----parents

# parent_parser = argparse.ArgumentParser(add_help=False)

# parent_parser.add_argument('--parent', type=int)

# foo_parser = argparse.ArgumentParser(parents=[parent_parser])

# foo_parser.add_argument('foo')

# foo_parser.parse_args(['--parent', '2', 'XXX'])

args = parser.parse_args()

print(args)

print(args.list)

# 执行命令:python3 parameter.py -l 1 2 3 4

# 输出:

# Namespace(list=['1', '2', '3', '4'])

# ['1', '2', '3', '4']

# 执行命令:python3 parameter.py -h

# 输出:

# usage: parameter.py [-h] [-l N [N ...]]

# two num add

# optional arguments:

# -h, --help show this help message and exit

# -l N [N ...] get int list

拓展知识:fire库用法

在命令行通过命令的方式调用python组建和方法等

import fire

class Calculator(object):

"""A simple calculator class."""

def double(self, number):

return 2 * number

if __name__ == '__main__':

fire.Fire(Calculator)

执行命令:python3 fire_study.py double 10

输出:20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值