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. DDD-领域驱动(四)-使用IMediator 实现领域事件

    领域事件是指:一个领域中出触发的 集成事件是指:多个微服务之前产生的事件 核心对象 IMediator INotification INotificationHandler 引入:IMediator ...

  2. git记不住用户名跟密码,每次提交拉取都需要再次输入

    问题:之前为了测试git提交的一个问题,选择不记住用户名跟密码,输入如下命令即可不记住 git credential-manager uninstall git update-git-for-wind ...

  3. mysql安装教程-window操作系统

    1.下载安装包(官网下载) 直达链接:https://dev.mysql.com/downloads/mysql/ 下载后放到指定目录下解压即可(给电脑新手忠告:注意不要放在C盘,养成好习惯,放C盘多 ...

  4. Linux实战笔记_CentOS7_无法识别NTFS格式的U盘

    注:因为CentOS 默认不识别NTFS的磁盘格式,所以我们要借助另外一个软件ntfs-3g来挂载.自带的yum源没有这个软件,要用第三方的软件源,比如阿里的epel. #安装ntfs-3g cd / ...

  5. Python学习笔记----操作字符串

    1.字符串相加.列表相加.列表和字符串不能混着使用 #序列相加 a="hello" b="python" c=a+b print("字符串相加的结果& ...

  6. golang中的锁竞争问题

    索引:https://www.waterflow.link/articles/1666884810643 当我们打印错误的时候使用锁可能会带来意想不到的结果. 我们看下面的例子: package ma ...

  7. (二)Three光线检测-实现摄像机向鼠标点击位置滑动动画

    (二)Three.js光线检测 摘要:使用three.js中的光线检测 Raycaster() ,实现一下效果: 通过点击处的坐标,修改摄像机位置,实现摄像机由远及近的过渡动态效果(由远景到近景) 1 ...

  8. SimpleDateFormat线程安全问题排查

    一. 问题现象 运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面. 二. 原因排查 首先,检查扫码后的跳转链接地址不是对应二维码的实际URL,根据代码逻辑推测,可能是acc ...

  9. .NET 7 AOT 的使用以及 .NET 与 Go 互相调用

    目录 背景 C# 部分 环境要求 创建一个控制台项目 体验 AOT 编译 C# 调用库函数 减少体积 C# 导出函数 C# 调用 C# 生成的 AOT Golang 部分 安装 GCC Golang ...

  10. 微信DAT文件解密(dat转图像)

    微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...