Python 中使用 argparse 解析命令行参数
作者:Moshe Zadka 发布时间:2023-10-26 14:10:42
使用 argparse
模块为应用程序设置命令行选项。
有一些第三方库用于命令行解析,但标准库 argparse
与之相比也毫不逊色。
无需添加很多依赖,你就可以编写带有实用参数解析功能的漂亮命令行工具。
1、Python 中的参数解析
使用 argparse 解析命令行参数时,第一步是配置一个 ArgumentParser
对象。这通常在全局模块内完成,因为单单_配置_一个解析器没有副作用。
import argparse
PARSER = argparse.ArgumentParser()
ArgumentParser
中最重要的方法是 .add_argument()
,它有几个变体。默认情况下,它会添加一个参数,并期望一个值。
PARSER.add_argument("--value")
查看实际效果,调用 .parse_args():
PARSER.parse_args(["--value", "some-value"])
Namespace(value='some-value')
也可以使用 = 语法:
PARSER.parse_args(["--value=some-value"])
Namespace(value='some-value')
为了缩短在命令行输入的命令,你还可以为选项指定一个短“别名”:
PARSER.add_argument("--thing", "-t")
可以传入短选项:
PARSER.parse_args("-t some-thing".split())
Namespace(value=None, thing='some-thing')
或者长选项:
PARSER.parse_args("--thing some-thing".split())
Namespace(value=None, thing='some-thing')
2、类型
有很多类型的参数可供你使用。除了默认类型,最流行的两个是布尔类型和计数器。布尔类型有一个默认为 True 的变体和一个默认为 False
的变体。
PARSER.add_argument("--active", action="store_true")
PARSER.add_argument("--no-dry-run", action="store_false", dest="dry_run")
PARSER.add_argument("--verbose", "-v", action="count")
除非显式传入 --active
,否则 active 就是 False。dry-run
默认是 True,除非传入 --no-dry-run
。无值的短选项可以并列。
传递所有参数会导致非默认状态:
PARSER.parse_args("--active --no-dry-run -vvvv".split())
Namespace(value=None, thing=None, active=True, dry_run=False, verbose=4)
默认值则比较单一:
PARSER.parse_args("".split())
Namespace(value=None, thing=None, active=False, dry_run=True, verbose=None)
3、子命令
经典的 Unix
命令秉承了“一次只做一件事,并做到极致”,但现代的趋势把“几个密切相关的操作”放在一起。
git
、podman
和 kubectl
充分说明了这种范式的流行。
argparse 库也可以做到:
MULTI_PARSER = argparse.ArgumentParser()
subparsers = MULTI_PARSER.add_subparsers()
get = subparsers.add_parser("get")
get.add_argument("--name")
get.set_defaults(command="get")
search = subparsers.add_parser("search")
search.add_argument("--query")
search.set_defaults(command="search")
MULTI_PARSER.parse_args("get --name awesome-name".split())
Namespace(name='awesome-name', command='get')
MULTI_PARSER.parse_args("search --query name~awesome".split())
Namespace(query='name~awesome', command='search')`
4、程序架构
使用 argparse 的一种方法是使用下面的结构:
## my_package/__main__.py
import argparse
import sys
from my_package import toplevel
parsed_arguments = toplevel.PARSER.parse_args(sys.argv[1:])
toplevel.main(parsed_arguments)
## my_package/toplevel.py
PARSER = argparse.ArgumentParser()
## .add_argument, etc.
def main(parsed_args):
...
# do stuff with parsed_args
在这种情况下,使用 python -m my_package
运行。或者,你可以在包安装时使用 console_scprits
入口点。
总结:
argparse
模块是一个强大的命令行参数解析器,还有很多功能没能在这里介绍。它能实现你想象的一切。
来源:https://developer.51cto.com/art/202111/690514.htm


猜你喜欢
- k近邻算法的介绍k近邻算法是一种基本的分类和回归方法,这里只实现分类的k近邻算法。k近邻算法的输入为实例的特征向量,对应特征空间的点;输出为
- 先由exp把数据卸出到文件系统, 产生一个.dmp文件, 然后必要时再由imp将数据装入数据库. 对于一般中小型数据库来说, 全数据库的ex
- 安装依赖主要这边还需要安装两个依赖,gorm、viper ,具体的可以访问他们的官网(Gorm官网地址 Viper Github地址)初始化
- 在上一篇文章《Python教程—模拟网页点击爬虫定位系统》讲解怎么通过模拟点击方式爬取车辆定位数据,本次介绍怎么以模拟点击方式进入交管121
- 成功解决ValueError: Supported target types are: ('binary', 'mu
- 利用Python处理数据时,处理完成后输出结果为二维的列表,如果我们想把这个列表输出到Excel中形成格式化的数据,其实和输出到TXT文件大
- 除了使用Django内置表单,有时往往我们需要自定义表单。对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误&qu
- 首先,在写数据库时需要遵循以下几个原则: 数据库的命名规范: &nbs
- 实例如下所示:tcode={}transcode={}def GetTcode():#从文本中获取英文对应的故障码,并保存在tcode字典(
- 本节重点让学生了安装上Python,配置好环境变量Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Pytho
- 啥也不说了,还是看代码吧! [root@yyjk DATABASE]# cat DBI.py# -*- coding: utf-8 -*-
- 1. 使用ioutil读取文本// 全部读取后按换行拆分func ReadFile1(path string) error {fileHan
- 目录range函数的使用第一种创建方式第二种创建方式第三种创建方式判断指定的数有没有在当前序列中循环结构总结range函数的使用作为循环遍历
- Jones向量假设光波沿z轴传播,那么其三个方向的电场分量可以表示为Jones矩阵能够保证二维列向量形状不变的运算有无穷多种,但最符合我们直
- 箱线图箱线图一般用来展现数据的分布,如上下四分位值、中位数等,也可以直观地展示异常点。Matplotlib提供了boxplot()函数绘制箱
- 传统来说,大家在CSS中使用的颜色要么是16进制格式,要么是rgb格式,就像rgb(171,205,239)。CSS3带来了一些新的处理颜色
- 相对C/C++ 而言,我们所用的JavaScript 在内存这一方面的处理已经让我们在开发中更注重业务逻辑的编写。但是随着业务的不断复杂化,
- 在网站开发过程中,可能需要用PHP实现验证邮箱格式是否正确,那么我们就可以通过PHP中filter_var函数来实现。下面我们就结合具体的代
- 今天在开发的时候,项目报了一个警告 Duplicate named routes definition ,这里记录一下
- 查询7天连续登陆用户这个问题很经典,解决方法也有很多,这里我讲一下笔者的方法,希望对大家有帮助。具体思路:1、因为每天用户登录次数可能不止一