我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python自学argparse模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python自学argparse模块

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块

  1. import argparse # 导入模块,这个没什么说的
  2. parser = argparse.ArgumentParser() # 实例化一个对象,默认参数一堆,只有description参数可以设置一下
  3. parser.add_argument() # 一次加入每一个参数或选项,主要是这里
  4. parser.parse_args() # 获取参数,用的时候给他赋个值
import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
# 先不添加参数
args = parser.parse_args()  # 打印一下所有参数

上面的例子运行后,由于没有添加任何参数,所以看不出什么。不过可以加上-h 或 --help 运行一下,会显示我们自定义的description的内容,以及默认的help的内容

添加参数的过程就是,反复调用add_argument()方法,一次加入一个参数。另外加入参数的同时,help的内容也会自动添加。

位置参数

import argparse
parser = argparse.ArgumentParser()  # 这里的关键参数去掉了,看看和刚才比缺少了什么
parser.add_argument('echo')  # 添加一个位置参数
args = parser.parse_args()
print(args.echo)  # 获取参数,打印出来
print(args)  # 看看整个的内容

此时再运行程序,会提示你缺少参数。必须带上一个参数运行,比如test.py arg_test。并且后面的参数只能是1个,就是不能多也不能少。
此时再次使用-h 或 --help 看一个帮助,会自动加上添加的参数,但是只有参数名,并没有说明

添加参数说明

调用add_argument()方法是,设置关键参数help,来添加参数说明

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')  # 把这个说明也加上
parser.add_argument('echo', help='直接打印这个参数的值')  # 为参数添加说明
args = parser.parse_args()
print(args.echo)  # 获取参数,打印出来
print(args)  # 看看整个的内容

此时再看一下help

设置参数的数据类型

所有的参数输入都是str类型,如果需要使用int类型的参数,通过关键参数type可以方便的实现

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('echo', help='直接打印这个参数的值', type=int)
args = parser.parse_args()
print(args.echo, type(args.echo))  # 获取参数,打印出来
print(args)  # 看看整个的内容

现在关键参数必须是数字,而且调用的时候显示的类型也是int类型了

使用文件作为参数

还是上面的type参数,可以设定type值为文件,比如: type=argparser.FileType('r')) 直接对文件进行操作。下面是参数直接输入一个文件路径后打印文件内容的例子:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file', type=argparse.FileType('r'))    # 读取文件
args = parser.parse_args()
# 打印文件内容
for line in args.file:
    print(line.strip())

将参数赋值给了位置参数'file',所以args.fine就是文件句柄,并且按type的要求打开了文件

定义默认值

从刚才开始必须要带参数才能运行程序了,可以通过设置默认值来解决不带参数启动的问题

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('echo', help='直接打印这个参数的值', type=int, default=0, nargs='?')
args = parser.parse_args()
print(args.echo, type(args.echo))  # 获取参数,打印出来
print(args)  # 看看整个的内容

现在不带参数也可以正常启动程序了,如果不跟参数,默认设置为default的值。这个用default='0'也是一样的哦,因为前面定义了type。但是如果没有定义type,那么用default=1的话传输的参数是int,但是你自己自定义参数的话,就无法传入int类型了。
nargs的作用是用来限定输入这个参数的个数,默认情况下我们必须输入1个,使用'?'的话,就是允许不输入或者输入一个。'+'的话表示是1个或多个,也可以使用数字或者'*' 就是允许多个参数,此时所有参数将组成一个列表,就是设为1也就一个列表和默认的情况不一样

参数候选值

使用choise关键参数,可以限定这个参数的值必须在候选的列表内。

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('echo', choices=['a', 'b', 'c'], default='a', nargs='?')
args = parser.parse_args()
print(args.echo, type(args.echo))  # 获取参数,打印出来
print(args)  # 看看整个的内容

这样只有输入正确才能正常执行,这里注意,如果有default,那么default的值也得再候选值之中。

选项参数

像-h 和 --help 一样,也可以设置自己的选项参数。设置的时候短参数和长参数可以值设置一个,如果没有冲突的话建议都写上。另外上面讲过的那些关键参数,比如说明、默认值、候选值都可以使用

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('-v', '--verbose', help='increase verbosity')
args = parser.parse_args()
print(args.verbose, type(args.verbose))  # 获取参数,打印出来
print(args)  # 看看整个的内容

如果有长参数,取值的时候就是使用长参数的名字取值。只有短参数的情况下才是用短参数的名字取值。当然也可以指定一个别的变量名。
和位置参数相反,选项参数默认是非必须。不输入选项的情况下取到的值是None,输入选项但是又没在后面写值而且也没默认值,则会出错。
如果需要,也可以将选项设置为必须输入。

指定选项参数的变量名

就如上面讲的,执行选项参数的变量名

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('-v', '--verbose', help='increase verbosity', dest='ver')  # 用dest来指定变量名
args = parser.parse_args()
print(args.ver, type(args.ver))  # 获取参数,打印出来。这里的变量名是自己在dest里指定的了
print(args)  # 看看整个的内容

选项参数-设为必须

使用required=True 后,这个选项就不再是可选的了,而是必须输入

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('-v', '--verbose', help='increase verbosity', required=True)
args = parser.parse_args()
print(args.verbose, type(args.verbose))  # 获取参数,打印出来
print(args)  # 看看整个的内容

选项参数-布尔值或固定值

上面使用可选参数的时候,必须在后面给这个参数赋值。有时候我只需要一个标识而不需要一个确切的值,比如-h 和 --help。这个可以通过使用action="store_true" 来实现。

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('-v', '--verbose', help='increase verbosity', action='store_true')
args = parser.parse_args()
print(args.verbose, type(args.verbose))  # 获取参数,打印出来
print(args)  # 看看整个的内容

此时你带参数运行,取到的值就是True,如果不带参数运行,取到的值就是False
也可以使用action="store_false" ,则正好相反
另外也可以是指定一个常量,类似action='store_const', const="Test" ,那么没有-v 值是None,有-v 的值就是"Test" ,此时-v后面不能跟值了,如果有则会被当做是位置参数处理。
默认的设置是 action="store'" 存储参数值。

action关键参数的其他用法-计数和追加

上面的关键参数action是参数值赋予的方式,除了上面的用法,还可以设置为下面的值,一般用的不多
如果是 'count' 表示将参数出现的次数作为参数的值
如果是 'append' 表示将每次出现的该参数后的值都存入同一个数组再赋值

import argparse
parser = argparse.ArgumentParser(description='解析命令行参数')
parser.add_argument('-c', '--count', help='参数值是这个参数出现的次数', action='count')
parser.add_argument('-a', '--append', help='参数是一个列表,每次添加一个元素', action='append')
args = parser.parse_args()
print(args)  # 看看整个的内容

分别使用下面的命令执行测试效果

python test.py -c
python test.py -ccc  # 和下面的那个一样
python test.py -c -c -c
python test.py -a A
python test.py -a A -a B

上面的例子中每次打印的都是我们设置过的对象,可以使用内置函数,将参数和值转化为字典的形式 print(vars(args))

虽然一般都是用在调用程序的时候指定一些参数,但是在程序内部也可以调用的。应该没什么用

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo', help='直接打印这个参数的值', nargs='*')  # nargs要设一下,否则默认启动程序都有一个参数
# 上面设了*,启动程序时可以有任意个参数,不过都没有,因为到下面会被Hello替代
args = parser.parse_args()  # 这样赋值后的args是传不了参数的
# args = parser.parse_args  # 可以这样,然后可以在后面再写上括号或者括号里填上参数
string = parser.parse_args(['Hello'])  # 还是直接使用吧,得把所有的参数写成列表
print(string)  # 分开写,看清楚一点。

大概就是上面这些了,类型Linux命令行那样的命令应该都可以方便的写出来了,而且还自动添加help。就整理这些吧,常用的应该都有了,如果还不够用那就再查吧。最后使用的时候记得写到函数里:

import argparse

# 封装到函数里
def parse_args():
    # 先实例化
    parser = argparse.ArgumentParser(description='解析命令行参数')
        # 依次添加每一个参数
    parser.add_argument('echo', help='直接打印这个参数的值')
    parser.add_argument('num', help='这是个整数', type=int, default=0, nargs='?')
    parser.add_argument('-v', '--verbose', help='increase verbosity')
        # 最后返回
    return parser.parse_args()

if __name__ == '__main__':
    # 这里直接调用上面的函数
    args = parse_args()
    print(args)

进化-子命令解析

经过了1年时间,我又去翻了一下文档,这次终于搞明白子命令怎么用了:

import argparse

def conn(host):
    print("def conn", 'host:', host)

def ping_test(hosts):
    print("def ping", "host_list: ", hosts)

def parse_args():
    parser = argparse.ArgumentParser(description='解析命令行参数')
    subparsers = parser.add_subparsers(help='子命令介绍')

    parser_sftp = subparsers.add_parser('conn', help='连接服务器')  # 定义一个子命令
    parser_sftp.set_defaults(func=conn)  # 设置默认参数,这个子命令里都会有这些参数。
    parser_sftp.add_argument('host', help="主机名")

    parser_file = subparsers.add_parser('ping_test', aliases=['ping'], help='ping测试')  # 这里还定义了别名
    parser_file.set_defaults(func=ping_test)
    parser_file.add_argument("hosts", help="主机列表", nargs='+')

    return parser

parser = parse_args()

if __name__ == '__main__':
    args = parser.parse_args(['conn', 'host1'])  # 文档里都是这样在IDLE里调用测试的
    print(args)
    dic_args = vars(args)  # 把 Namespace 转成字典
    func = dic_args.pop('func')  # 获取字典的的这个值,并且从字典里删除
    print(dic_args)
    func(**dic_args)

    args = parser.parse_args(['ping', 'host1', 'host2', 'host3'])
    dic_args = vars(args)
    func = dic_args.pop('func')
    print(dic_args)
    func(**dic_args)

号称标准库的 Argparse 写起来麻烦,这个 Click 模块用起来是最爽的。它是 Flask 的团队 pallets 的开源项目。Click 只要很少的代码就可以优雅地创造一个命令行工具,它致力于将创建命令行工具的过程变的快速而有趣。

安装

pip install Click

这里就简单记录一下,下次要写命令行工具可以试下这个。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python自学argparse模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python自学argparse模块

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块import argparse # 导入模块,这个没什么说的parser = argparse.ArgumentParser() #
2023-01-31

python学习之argparse模块

一、简介:argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,例如 python parseTest.py input.txt outpu
2023-01-31

Python学习教程:Python argparse模块

这篇Python学习教程主要是对 argparse(Python标准库中推荐的命令行解析模块) 进行简要介绍。note 还有两个其他模块也可以完成相同的任务,分别是 getopt(与C语言中的 getopt() 等效)和已经过时的 optp
2023-06-02

python 模块argparse用法实

argparse是python内置模块,用于快速创建命令行。有一个第三方模块Click也可以实现这个功能,两者各有优缺点,看个人需求吧。官方网页https://docs.python.org/3.5/library/argparse.htm
2023-01-31

Python的argparse 模块示例

节选自 The Python Standard Library by Example中文版转载:http://blog.xiayf.cn/2013/03/30/argparse/argparse模块作为optpar
2023-01-31

python argparse模块粗略了

https://docs.python.org/2.7/library/argparse.html#module-argparse看了一下python对于参数的处理,了解了argparse这个模块import argparseparser
2023-01-31

python中argparse模块有什么用

这篇文章将为大家详细讲解有关python中argparse模块有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.argparse模块简介argparse是python标准库里面用来处理命令行参数的
2023-06-02

python的argparse模块如何使用

这篇文章主要介绍“python的argparse模块如何使用”,在日常操作中,相信很多人在python的argparse模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python的argparse
2023-07-05

argparse模块详解

这篇文章主要介绍了argparse模块详解,需要的朋友可以参考下
2023-02-27

Python包argparse模块常用方法

目录argparse介绍argparse实例argparse介绍 argparse包用于解释命令行参数。这里给出几个常用的方法。# 创建解析器对象 # @para: description:描述信息 Arg = ArgumentParser
2022-06-02

python中argparse模块怎么使用

本篇内容主要讲解“python中argparse模块怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中argparse模块怎么使用”吧!argparse模块用法一、 概念arg
2023-07-02

python argparse模块传参怎么使用

这篇文章主要讲解了“python argparse模块传参怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python argparse模块传参怎么使用”吧!传入一个参数我们先在桌面新
2023-06-30

python中argparse模块及action='store_true'详解

argparse 是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分,这篇文章主要介绍了python中argparse模块及action=‘store_true‘详解,需要的朋友可以参考下
2023-02-10

Python包argparse模块常用方法有哪些

这篇文章给大家分享的是有关Python包argparse模块常用方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。argparse介绍  argparse包用于解释命令行参数。这里给出几个常用的方法。# 创
2023-06-15

python模块学习----nmap模块

安装nmap模块:pip install python_nmanmap模块说明:python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理
2023-01-31

python 命令行参数模块argparse的实现

本文主要介绍了python 命令行参数模块argparse的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录