Python argparse教程展示了如何使用argparse模块解析Python中的命令行参数。

1 使用说明

argparse模块使编写用户友好的命令行界面变得容易。它从中解析定义的参数sys.argv。该模块还自动生成帮助和用法消息,并在用户为程序提供无效参数时发出错误。使用ArgumentParser创建分析器,并使用add_argument()添加新参数变量。参数可以是optional(可选), required(必须), or positional(位置)。add_argument()中的常用参数设定值如下所示:

  • name or flags,输入参数的名字或者列表,例如 foo 或者 -f, --foo;
  • action,命令行遇到参数时的动作,默认值是 store;
    • store_const,表示赋值为const;
    • append,将输入的值存储成列表,也就是如果参数重复则会保存多个值;
    • append_const,将参数规范中定义的一个值保存到一个列表;
    • count,存储遇到的次数;
  • nargs,应该读取的命令行参数个数;
  • const,action 和 nargs 所需要的常量值;
  • defaul,参数的默认值;
  • type,命令行参数应该被转换成的类型;
  • choices,可用的参数集合;
  • required,该参数为必选输入参数;
  • help,帮助说明;
  • metavar,输入参数的替代名
  • dest,被添加到 parse_args()所返回对象上的属性名;

1.1 Python argparse可选参数

下面的示例创建test1.py,内容为一个简单的参数解析器。add_argument添加参数-o和–out两个参数,参数效果一样,都是可选参数。前一个为参数简写只有一个字母,后一个为全参数。如果输入参数则输出This is some output。还有一个add_argument还有一个固定参数action=‘store_true’,表示命令行遇到参数时的操作,store将参数设为const,默认值是 store。参数用解析parse_args()。解析后的参数作为对象属性存在。

#!/usr/bin/env python

import argparse

parser = argparse.ArgumentParser()

# action 命令行遇到参数时的动作
# -o为短参数,--output长参数
parser.add_argument('-o', '--output', action='store_true', help="shows output") # parse_args()解析参数
args = parser.parse_args() # 如果存在output
if args.output:
print("This is some output")
else:
print("This is not some output")
# 执行test1.py文件
# 输入--output参数
!python test1.py --output
print('-'*50)
# 输入-o参数
!python test1.py -o
print('-'*50)
# 什么都不输入
!python test1.py
print('-'*50)
# 输入--help参数
!python test1.py --help
!python test1.py -h
This is some output
--------------------------------------------------
This is some output
--------------------------------------------------
This is not some output
--------------------------------------------------
usage: test1.py [-h] [-o] optional arguments:
-h, --help show this help message and exit
-o, --output shows output
usage: test1.py [-h] [-o] optional arguments:
-h, --help show this help message and exit
-o, --output shows output

1.2 Python argparse必需参数

下面的示例创建test2.py,.add_argument()设定required = True,表示必须参数,该示例必须name指定选项。否则失败。

#!/usr/bin/env python

import argparse

# 创建解析器
parser = argparse.ArgumentParser()
# 设置--name为必须参数
parser.add_argument('--name', required=True)
# 解析参数
args = parser.parse_args() print('Hello {}'.format(args.name))
# 执行test2.py文件
# 不输入参数
!python test2.py
print('-'*50)
# 输入参数
!python test2.py --name hello
usage: test2.py [-h] --name NAME
test2.py: error: the following arguments are required: --name
--------------------------------------------------
Hello hello

1.3 Python argparse位置参数

下面的示例创建test3.py,位置参数不需要前缀符号,直接输入参数值。

#!/usr/bin/env python

import argparse

# positional args

parser = argparse.ArgumentParser()

parser.add_argument('name')
parser.add_argument('age') args = parser.parse_args() print('{} is {} years old'.format(args.name,args.age))
!python test3.py -h
print('-'*50)
!python test3.py --name
print('-'*50)
# 输入参数
!python test3.py "jack" 12
usage: test3.py [-h] name age

positional arguments:
name
age optional arguments:
-h, --help show this help message and exit
--------------------------------------------------
usage: test3.py [-h] name age
test3.py: error: the following arguments are required: name, age
--------------------------------------------------
jack is 12 years old

1.4 Python argparse dest

dest选项为add_argument()参数指定名称。如果未给出,则从选项中推断出来。下面的示例创建test4.py,将-n的参数名称设定为now。

#!/usr/bin/env python

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-n', dest='now', action='store_true', help="shows now")

args = parser.parse_args()

# -n代表now
if args.now:
print(args.now)
# 运行文件
!python test4.py -n
True

1.5 Python argparse type

通过type参数确定参数类型。下面的示例创建test5.py。程序显示从-100到100的n个随机整数。

#!/usr/bin/env python

import argparse
import random parser = argparse.ArgumentParser() # type确定参数的类型值
parser.add_argument('-n', type=int, required=True,
help="define the number of random integers")
args = parser.parse_args() n = args.n # 输出随机数
for i in range(n):
print(random.randint(-100, 100))
# 运行程序
!python test5.py -n 5
34
-81
76
-62
-66

1.6 Python argparse default

default如果未指定该值,则该选项指定默认值。下面的示例创建test6.py。该示例计算指数,不需要指数值;如果未给出,则默认值为2。如果输入参数没有必选参数,可以直接运行代码输出值;如果想在代码内改变值,直接参数复制即可如arg.b=2。

#!/usr/bin/env python

import argparse

parser = argparse.ArgumentParser()
# required设置强制性参数,设置输入参数
parser.add_argument('-b', type=int, required=True, help="defines the base value")
# default设置默认参数,设置指数值
parser.add_argument('-e', type=int, default=2, help="defines the exponent value")
args = parser.parse_args() val = 1 base = args.b
exp = args.e for i in range(exp):
val *= base print(val)
# 使用 默认参数
!python test6.py -b 2
print('-'*50)
# 给定默认参数
!python test6.py -b 2 -e 3
4
--------------------------------------------------
8

1.7 Python argparse metavar

metavar选项为错误的期望值命名,并提供帮助输出。下面的示例创建test7.py。该示例设置期望值为value。默认名称是v。

#!/usr/bin/env python

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-v', type=int, required=True, metavar='value',
help="computes cube for the given value")
args = parser.parse_args() print(args) val = args.v print(val * val * val)
!python test7.py -h
usage: test7.py [-h] -v value

optional arguments:
-h, --help show this help message and exit
-v value computes cube for the given value

1.8 Python argparse append action

append操作允许对重复选项进行分组。下面的示例创建test8.py。

#!/usr/bin/env python

import argparse

# append action allows to group repeating
# options parser = argparse.ArgumentParser() parser.add_argument('-n', '--name', dest='names', action='append',
help="provides names to greet") args = parser.parse_args() names = args.names # 分组输出
for name in names:
print('Hello {}!'.format(name))
!python test8.py -n Jack -n Rosy --name Jane
Hello Jack!
Hello Rosy!
Hello Jane!

1.9 Python argparse choices

choices选项将参数限制为给定列表。在示例test9.py中,now选项可以接受以下值:1,2,3。

#!/usr/bin/env python

import argparse
import datetime
import time parser = argparse.ArgumentParser() parser.add_argument('--now', dest='format', type=int, choices=[1, 2, 3],help="shows num in given format") args = parser.parse_args()
fmt = args.format print(fmt)
# 输入在可选范围内值
!python test9.py --now 1
print('-'*50)
# 输入不在可选范围内值
!python test9.py --now 4
print('-'*50)
# 不输入
!python test9.py
1
--------------------------------------------------
usage: test9.py [-h] [--now {1,2,3}]
test9.py: error: argument --now: invalid choice: 4 (choose from 1, 2, 3)
--------------------------------------------------
None

2 参考

[编程基础] Python命令行解析库argparse学习笔记的更多相关文章

  1. Python命令行解析库argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...

  2. Python命令行解析库argparse(转)

    原文:http://www.cnblogs.com/linxiyue/p/3908623.html 2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse ...

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

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

  4. Python 命令行解析工具 Argparse介绍

    最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具. 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题 ...

  5. python命令行解析工具argparse模块【1】

    argpaser是python中很好用的一个命令行解析模块,使用它我们可以很方便的创建用户友好型命令行程序.而且argparse会自动生成帮助信息和错误信息. 一.示例 例如下面的例子,从命令行中获取 ...

  6. Python 命令行解析模块 —— argparse

    argparse是python标准库里面用来处理命令行参数的库,基本使用步骤如下: 1.import argparse    导入模块 2.parser = argparse.ArgumentPars ...

  7. python命令行解析工具argparse模块【2】

    上一节,我们简要的介绍了argparse的用法,接下来几节,将详细讲解其中的参数及用法,这一节我们讲解ArgumentParser对象. argparse.ArgumentParser([descri ...

  8. python命令行解析工具argparse模块【3】

    上一节,我们讲解了ArgumentParser对象,这一节我们将学习这个对象的add_argument()方法.         add_argument()方法的定义了如何解析一个命令行参数,每个参 ...

  9. python命令行解析工具argparse模块【5】

            上一节我们学习了parse_args()的用法,这一节,我们将继续学习argparse的其他一些用法.         1.sub-commands子命令         argpar ...

随机推荐

  1. 齐博x1模块安装文件讲解

    频道模块存放的目录是/application/频道目录/ 插件存放的目录是/plugins/插件目录/ 他的安装目录都是/install/ 推荐参考默认的/application/cms/instal ...

  2. MassTransit | .NET 分布式应用框架

    引言 A free, open-source distributed application framework for .NET. 一个免费.开源的.NET 分布式应用框架. -- MassTran ...

  3. WPF 鼠标移动到图片变大,移开还原,单击触发事件效果

    <Grid>         <Canvas x:Name="LayoutRoot">             <Image Cursor=" ...

  4. Spring源码知识

    bean的生命周期: 实例化:在堆空间中申请内存,使用反射来实现:(createBeanInstance) 自定义属性赋值(setter).容器对象属性赋值(invokeAwareMethods) 前 ...

  5. 题解 P6745 『MdOI R3』Number

    前言 不知道是不是正解但是觉得挺好理解. 科学计数法 将一个数表示为\(a\times 10^x\) 的形式.其中\(a\leq10\),\(x\) 为整数. \(\sf Solution\) 其实这 ...

  6. 【保姆教程】RuoYi-Radius搭建实现portal认证

    [保姆教程]RuoYi-Radius搭建实现portal认证 一.简介 以若依后台管理框架V4.6.0做为基础框架,实现了ToughRADIUS大部分功能,支持标准RADIUS协议(RFC 2865, ...

  7. Docker基础和常用命令

    Docker基础和常用命令 一,Docker 简介 1.1,什么是 Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,nam ...

  8. 使用WSL2连接USB设备

    目录 要求 安装 第一步 在Window安装usbipd 第二步 在WSL里安装USBIP 工具和硬件数据库 使用方法 22.3.19 微软官方文档:连接 USB 设备 | Microsoft Doc ...

  9. ubuntu 基本指令

    系统相关 df: disk free 用以显示系统上文件系统磁盘的使用情况 # 以M/G单位显示硬盘空间大小 df -h apt: advanced packaging tool 包管理工具 apt ...

  10. day12-Servlet02

    Servlet02 6.GET和POST请求的分发处理 开发Servlet,通常编写doGet,doPost方法.来对表单的get和post请求进行分发处理 例子 在web文件夹下面创建一个html页 ...