Argparse模块的基本使用

今天在学习python网络编程时,书中将客户端和服务端放在同一个代码中,用命令行参数来分别运行,其中的命令行参数部分让我有些困惑,所以今天特地看了以下argparse模块以便以后记忆。

1.什么是命令行参数?

顾名思义,命令行参数就是在命令行中运行代码时输入的参数,那么它有什么用呢?
首先,它包含一些文件本身的基本信息。
创建一个名为’argparse_train.py’的文件

import argparse

parse=argparse.ArgumentParser()
parse.parse_args()

然后win+R键入cmd,找到文件路径,

python argparse_train.py --help

在这里插入图片描述可以看到usage用法和底下的可选参数,因为我们还没有添加其他命令行参数,所以只有-h/–help这一个参数
下面就让我们来使用argparse模块使用命令行参数

2.argparse- 用于命令行选项,参数和子命令的解析器

标题是官方文档的chrome自动翻译,我觉得还是挺有道理的。

1.创建ArgumentParse对象:

class argparse.ArgumentParser(prog = None,
usage = None,
description = None,
epilog = None,
parents = [],
formatter_class = argparse.HelpFormatter,
prefix_chars =' - ',
fromfile_prefix_chars = None,
argument_default = None,
conflict_handler ='error',
add_help = True,
allow_abbrev = True

可以看出参数有12个之多,看这些东西花费了我不少时间,也总结出其中较为有用的一些参数

1)prog:程序名称

prog参数是程序的名称,它在usage(用法)中会有显示,我们改变一下它的值看有什么反应。
在参数中加上prog,我们改成name。

parse=argparse.ArgumentParser(prog='name')

在这里插入图片描述
可以看出usage中的名称已经变了。

2)usage:用法

这个参数没有什么好说的,填入参数会覆盖本来的usage,本来的名字也会被覆盖。

3)description:描述

你可以对命令行参数进行描述,它们会出现于usage和optional arguments之间

parse=argparse.ArgumentParser(prog='name',description='How to use it')

在这里插入图片描述

4)parent:继承/共享一组参数

import argparse

parse=argparse.ArgumentParser(description='How to use it',add_help=False)#注意这里的add_help必须改为False,否则会因为下面的继承会有两个help从而报错
parse.add_argument('-age',type=int,default=20)
parse.add_argument('build',default='middle')
parse.add_argument('height',type=float)#添加了三个参数
args=parse.parse_args(['-age','20','middle','175'])
print(args)

sub_parse=argparse.ArgumentParser(parents=[parse],description="This is a example for the 'parent'")
sub_args=sub_parse.parse_args(['-age','25','high','200.0'])
print(sub_args)

输出

Namespace(age=20, build='middle', height=175.0)
Namespace(age=25, build='high', height=200.0)

可以看到我们并未为其添加参数,而可以直接给值,说明继承了上面parse的参数。

5)prefix_chars:前缀解释器

在一般的命令行语句中,一般用‘-’作为前缀,如‘-help’等;这是因为prefix_char参数默认值为’-’。改为其他值如’±/’,可以识别’+’,‘-’.’/‘作为前缀。
比如把上述程序中的值改为’+’,会显示:

argparse_train.py: error: argument -age: invalid int value: '-age'

6)fromfile_prefix_chars:

有时候有大量参数时,将参数保存在一个文件中灵活性更高,而该参数则可以指定一个符号,使之后赋值时识别文件。读取时每行视为一个参数。

import argparse,sys

with open('args.txt','w') as op:
    op.write('-age\n555\nhigh\n183')

parse=argparse.ArgumentParser(description='How to use it',add_help=False,prefix_chars='-+=',fromfile_prefix_chars='~')

parse.add_argument('-age',type=int,default=20)
parse.add_argument('build',default='middle')
parse.add_argument('height',type=float,default='222')

args=parse.parse_args(['~args.txt'])
print(args)

输出为:

Namespace(age=555, build='high', height=183.0)

2.add_argument()方法

该方法用来添加命令行参数,完整参数如下

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数也比较多,有几个比较有用。

1)name or flags:参数名称

分为位置参数和可选参数,位置参数是普通字符串,可选参数“-”加字符串。

2)action:指定与命令行参数相关的动作

如:store储存参数(默认值),store_true和store_false分别用于储存true和false,而store_const则是用来储存const关键字指定的内容,如:
在上面的代码中加入三行:

parse.add_argument('帅',action='store_true')
parse.add_argument('穷',action='store_false')
parse.add_argument('today',action='store_const',const='国庆')

输出:
Namespace(age=555, build='high', height=183.0, today='国庆',=True,=False)

另外,还有append和count参数,append将储存一个列表,只能用于可选参数,用于位置参数添加多个值时还需nargs=‘*’,而count则计算关键字参数出现的次数:

import argparse,sys

parse=argparse.ArgumentParser(prog='square',description='Return square of input')

parse.add_argument('--input',action='append')
parse.add_argument('-victory','-v',action='count')#count计算关键字参数出现次数

args=parse.parse_args('--input 1 --input 2 --input 3 --input 4 -vvvv'.split())
print(args)
for i in args.input:
    print(int(i)**2,end=' ')

输出:
Namespace(input=['1', '2', '3', '4'], victory=4)
1 4 9 16

3)nargs

类似与正则表达式的规则:

nargs作用
n(整数)将n个命令行中的参数收集到一个列表中,类似append
有参数值则带入,没有则为默认值,如果是可选参数,可能为const值
*所有的参数值都收集到一个列表中,不分位置参数还是可选参数
+和*一样将参数都放入列表,只是没有参数时报错
REMAINDER将剩下的参数放入一个列表中
import argparse,sys

parse=argparse.ArgumentParser(prog='square',description='Return square of input')

parse.add_argument('input',nargs=4)
parse.add_argument('number',nargs='?',default='250')
parse.add_argument('victory',nargs=argparse.REMAINDER)

args=parse.parse_args(' 1  2  3  4    shuaideyipi 666 '.split())
print(args)
for i in args.input:
    print(int(i)**2,end=' ')

输出:
Namespace(input=['1', '2', '3', '4'], number='250', victory=['666', 'shuaideyipi', '666'])
1 4 9 16 

最好不要混用多个nargs参数,不然很有可能赋值的时候得不到你想要的结果。

4)const:常量

只有在有参数action=store_const或者append_const,及nargs=’?'时const指定的值将存入变量中,其它情况const默认为None。

5)default:默认值

默认值,对于一些本来就有值的变量,可以通过在该方法中设置default参数的值来确定默认值,需要修改时直接赋值即可。

6)type:类型

是命令行参数的类型,默认为str,可以改为需要的格式。除了常用的几个类型外,type还支持自己定义的类型,官方文档上有这么一段代码:

import argparse,math

def perfect_square(string):
    value = int(string)
    sqrt = math.sqrt(value)
    if sqrt != int(sqrt):
        msg = "%r is not a perfect square" % string
        raise argparse.ArgumentTypeError(msg)
    return value

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('foo', type=perfect_square)
parser.parse_args(['9'])

parser.parse_args(['7'])
输出:
usage: PROG [-h] foo
PROG: error: argument foo: '7' is not a perfect square#即为自己定于的类型

7)choices

有些时候我们希望在有限的几个参数中进行选择,choices提供了这个功能,即提供可选的参数值,填入参数列表中,在可选参数之外的值将报错。

import argparse

parse=argparse.ArgumentParser(prog='me',description='Hi')

parse.add_argument('Appearence',choices=['帅','贼帅','相当帅'])

args=parse.parse_args('丑')

print(args)

输出:
usage: me [-h] {,贼帅,相当帅}
me: error: argument Appearence: invalid choice: '丑' (choose from '帅', '贼帅', '相当帅')

8)required:必要

通过在可选参数中将required设置为True可以将可选参数转化为必要参数,不赋值将报错。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)

parser.parse_args([])
输出:
usage: argparse.py [-h] [--foo FOO]
argparse.py: error: option --foo is required

9)help:帮助

相当于之前的description,可以写上注释啥的。会在用户请求帮助时显示在各参数的后面。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
arg模块Python的一个标准库,用于解析命令行参数和选项。它提供了一种简单而灵活的方式来处理命令行输入,帮助开发者构建命令行界面的工具。 使用argparse模块,你可以定义命令行参数和选项,以及它们的类型、默认值和帮助信息。它还可以自动生成帮助文档,并处理用户输入的参数。 下面是一个示例,演示如何使用argparse模块来解析命令行参数: ```python import argparse # 创建一个ArgumentParser对象 parser = argparse.ArgumentParser(description='这是一个示例程序') # 添加命令行参数 parser.add_argument('input_file', help='输入文件名') parser.add_argument('--output', '-o', help='输出文件名') # 解析命令行参数 args = parser.parse_args() # 使用解析后的参数 print('输入文件名:', args.input_file) print('输出文件名:', args.output) ``` 在上面的示例中,我们创建了一个ArgumentParser对象,并添加了两个命令行参数。其中,'input_file'是一个必需的位置参数,'--output'(或'-o'的简写形式)是一个可选的参数。 当我们运行这个程序时,可以通过命令行传递参数,例如: ``` python myprogram.py input.txt -o output.txt ``` 程序会解析命令行参数,并输出结果: ``` 输入文件名: input.txt 输出文件名: output.txt ``` 这只是argparse模块基本用法,它还提供了许多其他功能,如校验参数、分组参数等。你可以参考Python官方文档或其他教程来深入学习argparse模块的用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值