Python 命令行解析工具 argparse基本用法
作者:Python数据开发 发布时间:2023-06-15 01:34:46
在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse。这里面功能最强大的莫过于 argparse,下面就来看看它用法。
import argparse
# 使用 argparse 分为以下几步
# 1. 创建命令行解析器对象
parse = argparse.ArgumentParser(
description="这是命令行解析器"
)
# 2.给解析器添加命令行参数,可以添加任意个
parse.add_argument("-n", dest="name")
# 3. 从命令中将参数解析出来
args = parse.parse_args()
# 然后通过 args 便可以拿到相应的参数值
print(args.name)
我们执行一下看看,当前文件叫做 tools.py。
技术提升
本文由技术群粉丝投稿分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
怎么样,是不是很简单呢?所以我们的重点就在 add_argument 方法上面,来看看它都支持哪些参数。
import argparse
parse = argparse.ArgumentParser()
# 这里出现了 "-n" 和 "--name"
# 在命令行中可以通过 '-n 古明地觉' 或者 '--name 古明地觉' 进行指定
# 两者的含义是一样的,但 - 后面一般跟短参数,-- 后面跟长参数
# 然后是 dest,它表示获取相关参数值时,使用的名称
parse.add_argument("-n", "--name", dest="name")
# 这里只有一个短参数,那么在命令行中需要通过 -a 来指定
parse.add_argument("-a", dest="age")
# 这里只有一个长参数,那么在命令行中需要通过 --gender 来指定
parse.add_argument("--gender", dest="gender")
args = parse.parse_args()
print(f"name: {args.name}, age: {args.age}, gender: {args.gender}")
我们来试一下:
还是很简单的,一个 - 后面跟的是短参数,两个 - 后面跟的是长参数。在命令行中通过 - 或者 – 进行指定,解析完毕之后再通过 dest 参数指定的名字进行获取。
另外,虽然 - 后面跟短参数,-- 后面跟长参数,但我们这样写也是可以的。
parse.add_argument("-name", "--n", dest="name")
只不过这种写法比较怪异,应该写成 --name 和 -n,一个横杠后面是短参数,两个是长参数。
然后这些参数都是可以不指定的,会使用默认值 None。
如果我希望它是必传参数,该怎么办呢?
import argparse
parse = argparse.ArgumentParser()
parse.add_argument("--host", dest="host", required=True)
parse.add_argument("-p", dest="port", default=6379)
args = parse.parse_args()
print(f"host: {args.host}, port: {args.port}")
我们看到当 host 不指定的时候,就会报错。并且我们还通过 default 参数指定了默认值。
然后是参数值的类型,不管什么参数,只要我们在命令行当中传递了,那么解析出来的默认都是字符串类型。
import argparse
parse = argparse.ArgumentParser()
parse.add_argument("-p", dest="port", default=6379)
args = parse.parse_args()
print(f"port 类型: {args.port.__class__}")
那么可不可以指定参数的类型呢?答案是可以的。
import argparse
parse = argparse.ArgumentParser()
parse.add_argument("-p", dest="port", type=int)
args = parse.parse_args()
print(f"port 类型: {args.port.__class__}")
通过指定 type 为 int,那么在将参数值解析出来之后就会调用 int 进行转化,转化失败则报错。
同理,我们也可以换成其它类型,举个例子。
还是很简单的,甚至换成我们自定义的类,或者一个函数也是可以的,
此时我们就实现了给一个参数传递多个值,不过这种做法属于是曲线救国,我们应该通过另一个参数实现。
nargs 指定为 *,那么表示 --hobby 可以接收多个值,并且值之间使用空格进行分隔,最终会得到一个列表。如果指定 --hobby,但是不传值,那么会得到空列表。
来源:https://blog.csdn.net/m0_59596937/article/details/128365570
猜你喜欢
- 管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。但实际上并非如此。在这里,我们列出了一些对于SQL Serve
- 代码如下:--根据MAX(MIN)ID CREATE PROC [dbo].[proc_select_id] @pageindex int=
- 很多人可能发现,无论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理下列要求时,会比
- PHP crc32() 函数实例输出 crc32() 的结果:<?php $str = crc32("Hello World
- 一直在用JS写ASP,也不是特别原因,只是当初学的是JS,后来学ASP时知道ASP也可以用JS写,就没去学VBS.前几个月刚学ASP的时候找
- 一个网站的一个页面download.asp通过判断referer来确定是不是从他本站点过来的链接,使用这个功能我们可以用来防止下载盗链,当然
- Jaslabs的Justin Silverton列出了十条有关优化MySQL查询的语句,我不得不对此发表言论,因为这个清单非常非常糟糕。另外
- 设计页面时,经常会从一个页面打开一个子窗口以供浏览者查看。通常,这种子窗口中的内容一经浏览者看过,对于浏览者而言就不再需要,而他们常常会忘记
- YUI 中的 Grids CSS 主要有三个部分值得大家关注和学习:Yahoo!网站性能最佳体验的34条黄金守则—内容 1、布局的思想:使用
- 测试环境:1:xp系统2:双显,1680×1050 + 1050×16803:chrome 版本4.14:ff版本3.6chrome是我的默
- python使用utf8编码,mysql也是utf8编码,是什么问题?后来查了一下,使用一个简单的办法即可:vsql = "ins
- 这段后门代码可以隐藏在asp文件中,大家可以搜索一些特点的关键字,查看文件的修改日期,看看是不是有如下的代码。<%if re
- 这句代码在IE9之前曾被称为世界上最短的IE判定代码。代码虽短但确包含了不少javascript基础知识在里面。var ie&nb
- Introduction简介So what is POSH? No, it's not just some new clothing
- 阅读上一篇:交互设计模式(二)-Pagination(分页,标记页数) Tagging(标签)问题摘要用户往往想通过流行或最详尽的主题来浏览
- 在进行Web的交互设计中,颜色信息的传达也是不可或缺的一部分。我们常会发现许多“灰色”的应用,他们的出现总是不动声色而又恰如其分,维持了整个
- 提高SQL执行效率的几点建议:◆尽量不要在where中包含子查询;关于时间的查询,尽量不要写成:where to_char(dif_date
- 本文列出了HTML4标签的默认样式列表,对网页设计者来说这个应该很有用。原文来自:W3C (http://www.w3.org/TR/CSS
- sql server端口,我们可以通过\"服务器端网络试用工具\"和\"客户端实用工具\"来设定,设
- 当你需要一个简单易用的导航菜单得时候。CSS Menu是个不错的选择。相对于Flash/Javascript,他们小巧轻便,而且方便使用。当