python命令行参数作用_Python命令行参数解析模块argparse

前言

更多内容,请访问我的 个人博客。

以前 optparse 比较火,但是在python2.7版本后,官方不再维护这个模块,转而大力支持 argparse 。

argparse 模块可以让人轻松编写用户友好的命令行接口。她可以从 sys.argv 中解析出参数,并自动生成帮助和使用手册,还能在传入无效参数时报出错误信息。

基础用法

由于是标准库,所以不需要安装,直接使用:

import argparse

parser = argparse.ArgumentParser()

# parser.add_argument("-i", "--info", action = "store", type = "string", dest = "sample_info", help = "the sample information")

args = parser.parse_args()

# print(args.sample_info)

运行以上代码,如下:

不输入参数,也没有输出结果:

$ python3 test.py

输入默认参数 --help (也可缩写为 -h ),会输出自动生成的帮助信息:

$ python3 test.py --help

# 输出:

usage: test.py [-h]

optional arguments:

-h, --help show this help message and exit

输入错误参数,会输出报错信息:

$ python3 test.py -verbose

# 输出:

usage: test.py [-h]

test.py: error: unrecognized arguments: --verbose

创建解析器

使用 argparse 的第一步是创建一个 ArgumentParser 对象,如下:

import argparse

parser = argparse.ArgumentParser(prog=None, usage=None,description=None,

epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None,

argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)

创建一个新的 ArgumentParser 对象。所有的参数都应当作为关键字参数传入。部分参数在下面都有它更详细的描述,但简而言之,它们是:

prog - 程序的名称(默认:sys.argv[0])

usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)

description - 在参数帮助文档之前显示的文本(默认值:无)

epilog - 在参数帮助文档之后显示的文本(默认值:无)

parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内

formatter_class - 用于自定义帮助文档输出格式的类

prefix_chars - 可选参数的前缀字符集合(默认值:'-')

fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None)

argument_default - 参数的全局默认值(默认值: None)

conflict_handler - 解决冲突选项的策略(通常是不必要的)

add_help - 为解析器添加一个 -h/--help 选项(默认值: True)

allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)

prog

默认情况下, ArgumentParser 对象在帮助消息中显示的程序名称是 sys.argv[0] 。若要自定义程序名,则使用 prog ,如下:

>>> parser = argparse.ArgumentParser(prog='myprogram')

>>> parser.print_help()

usage: myprogram [-h]

optional arguments:

-h, --help show this help message and exit

无论是从 sys.argv[0] 或是从 prog= 参数确定的程序名称,都可以在帮助消息里通过 %(prog)s 格式串来引用,如下:

>>> parser = argparse.ArgumentParser(prog='myprogram')

>>> parser.add_argument('--foo', help='foo of the %(prog)s program')

>>> parser.print_help()

usage: myprogram [-h] [--foo FOO]

optional arguments:

-h, --help show this help message and exit

--foo FOO foo of the myprogram program

usage

构建用法消息,如下:

>>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')

>>> parser.add_argument('--foo', nargs='?', help='foo help')

>>> parser.add_argument('bar', nargs='+', help='bar help')

>>> parser.print_help()

usage: PROG [options]

positional arguments:

bar bar help

optional arguments:

-h, --help show this help message and exit

--foo [FOO] foo help

description

简要描述这个程度做什么以及怎么做。在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间,如下:

>>> parser = argparse.ArgumentParser(description='A foo that bars')

>>> parser.print_help()

usage: argparse.py [-h]

A foo that bars

optional arguments:

-h, --help show this help message and exit

epilog

一些程序喜欢在 description 参数后显示额外的对程序的描述,如下:

>>> parser = argparse.ArgumentParser(

... description='A foo that bars',

... epilog="And that's how you'd foo a bar")

>>> parser.print_help()

usage: argparse.py [-h]

A foo that bars

optional arguments:

-h, --help show this help message and exit

And that's how you'd foo a bar

add_help

是否关闭自动生成的帮助信息,如下:

>>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)

>>> parser.add_argument('--foo', help='foo help')

>>> parser.print_help()

usage: PROG [--foo FOO]

optional arguments:

--foo FOO foo help

添加参数

使用 add_argument() 方法添加参数。其中,部分参数在下面都有它更详细的描述,但简而言之,它们是:

name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。

action - 当参数在命令行中出现时使用的动作基本类型。

nargs - 命令行参数应当消耗的数目。

const - 被一些 action 和 nargs 选择所需求的常数。

default - 当参数未在命令行中出现时使用的值。

type - 命令行参数应当被转换成的类型。

choices - 可用的参数的容器。

required - 此命令行选项是否可省略 (仅选项可用)。

help - 一个此选项作用的简单描述。

metavar - 在使用方法消息中使用的参数值示例。

dest - 被添加到 parse_args() 所返回对象上的属性名。

name or flags

第一个传递给 add_argument() 的参数必须是一系列 flags 或者是一个简单的参数名,如下:

>>> parser.add_argument('-f', '--foo')

or

>>> parser.add_argument('bar')

action

store - 存储参数的值。这是默认的动作。如下:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--foo')

>>> parser.parse_args('--foo 1'.split())

Namespace(foo='1')

store_const - 存储被 const 命名参数指定的值。 store_const 动作通常用在选项中来指定一些标志。如下:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--foo', action='store_const', const=42)

>>> parser.parse_args(['--foo'])

Namespace(foo=42)

store_true 和 store_false - 这些是 store_const 分别用作存储 True 和 False 值的特殊用例。另外,它们的默认值分别为 False 和 True。如下:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--foo', action='store_true')

>>> parser.add_argument('--bar', action='store_false')

>>> parser.add_argument('--baz', action='store_false')

>>> parser.parse_args('--foo --bar'.split())

Namespace(foo=True, bar=False, baz=True)

append - 存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用。如下:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--foo', action='append')

>>> parser.parse_args('--foo 1 --foo 2'.split())

Namespace(foo=['1', '2'])

count - 计算一个关键字参数出现的数目或次数。例如,对于一个增长的详情等级来说有用。如下:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--verbose', '-v', action='count')

>>> parser.parse_args(['-vvv'])

Namespace(verbose=3)

version - 期望有一个 version= 命名参数在 add_argument() 调用中,并打印版本信息并在调用后退出。如下:

>>> import argparse

>>> parser = argparse.ArgumentParser(prog='PROG')

>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')

>>> parser.parse_args(['--version'])

PROG 2.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCP-bzoj-1019

项目编号:bzoj-1019 项目等级:Safe 项目描述: 戳这里 特殊收容措施: 对于一个hanoi,知道了各种移动操作的优先级,也就确定了方案。可以证明对于盘子数为N的hanoi,任意移动方案都等价于将数目为N…

shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很熟悉,在所有的Shell编程的书中都会提到#!/bin/bash,而这里到底包含了些什么?对…

一键分享手机代码_通过广告路由器指定手机浏览器自动认证WIFI上网 附代码

说说应用过程,下面用手机QQ浏览器为例。在路由器搭建免费WIFI,用户连接免费WIFI后,使用手机QQ浏览器点击打开任意网页即可自动通过认证并上网,有的手机会自动打开认证网页,如果使用其他手机浏览器则自动跳转到引导认证…

netbeans7.4_NetBeans 7.1:创建自定义提示

netbeans7.4我已经在帖子中对我最喜欢的NetBeans提示进行了讨论,这些帖子中包含用于现代化Java代码的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是,由于…

linux uboot启动流程分析,uboot启动流程分析

uboot版本为NXP维护的2016.03版本下载地址为http://git.freescale.com/git/...分析uboot的启动流程,需要编译一下uboot,然后打开链接脚本u-boot.lds在u-boot.lds中1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf…

matlab求解线性方程组

模电题现在看来是不用matlab解方程不可做了orz 绝望,各种绝望,平时不努力到了期末季就焦虑得不行。 左除法就好 xA/b; 如果有符号变量,用syms声明一下就好。 越来越懒了orz好吧,解线性方程组这种毫无技术含量的东西用matlab倒是没…

魔术命令python_Python前10个魔术命令可以帮助您提高生产率

注意:Python不仅是最常用的编程语言,而且在集成新函数时也是最灵活的。例如,magic命令是Python shell的重要功能之一。让我们来看看10个简单的魔法命令来帮助工程师提高生产率。Python中的magic命令是什么?Magic命令是对常规Pytho…

JavaOne 2015 –第二十版十大收获

我们刚刚在旧金山有了JavaOne的第二十版。 这将是我自2004年以来第十二次参加不间断的系列活动。最大的教训是什么,可以揭示Java的未来。 模块化斗争 自从Java 2007首次提到模块以来,已经花费了将近9年的时间,或者说,直到2016年9…

linux can接口不使用过滤,linux can 总线socket接口测试使用

最近调试一个sja1000的can驱动,发现到了2.6.36,linux把can总线封装成了网络接口。内核文档里给出了这么修改的原因。1. Overview / What is Socket CAN--------------------------------The socketcan package is an implementation of CAN protocols (C…

IOS--文件管理NSFileManager

iOS的沙盒机制。应用仅仅能訪问自己应用文件夹下的文件。iOS不像android。没有SD 卡概念。不能直接訪问图像、视频等内容。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每一个沙盒含有3个文件 夹:Docum…

linux修改文件内容_详解5种实用方法---Linux系统清空或删除大文件内容

概述有时我们在处理Linux终端中的文件时,可能要去清除文件的内容,而无需使用任何Linux命令行编辑器打开它。怎么才能实现呢?下面通过几种不同的方式教大家清空文件内容。1.通过重定向到空来清空文件内容使用shell重定向null(不存在的对象)清空…

c语言include不起作用,c语言中include的使用方法

c语言中include的使用方法发布时间:2020-06-16 09:09:37来源:亿速云阅读:185作者:Leah这篇文章将为大家详细讲解有关c语言中include的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大…

linux下如何安装配置redis及主从配置

redis是一种非关系型数据存储工具,这区别于传统的关系型数据库(像MySQL等),类似于memcache,并且其内部集成了对list(链表)、set(集合)的操作,可以很方便快速的处理数据(像插入、删除list取交集 并集 差集等),这极大的减…

jsf集成spring_Spring和JSF集成:动态导航

jsf集成spring通常&#xff0c;您的JSF应用程序将需要超越基本的静态导航并开始做出动态导航决策。 例如&#xff0c;您可能想根据用户的年龄重定向他们。 大多数JSF教程建议通过将命令的action属性绑定到支持bean来实现动态导航&#xff1a; <h:commandButton action"…

python 3.6 tensorflow_无法在python 3.6中导入Tensorflow

我无法导入Tensorflow。 我的GPU nvidia 940mx和我正在使用python 3.6。我安装的软件包是&#xff1a;absl-py(0.2.0)阿斯特(0.6.2)漂白剂(1.5.0)循环器(0.10.0)气(0.2.0)grpcio(1.11.0)html5lib(0.9999999)猕猴桃(1.0.1)降价(2.6.11)matplotlib(2.2.2)numpy的(1.14.2)opencv-p…

凯撒密码c语言小写字母,凯撒密码c(c语言编程凯撒密码)

凯撒密码c(c语言编程凯撒密码)2020-05-15 13:09:51共10个回答#include#includeintmain(){charsave[10][30];inta,b,i,j;scanf(&#xff02;%d&#xff02;,&a);for(i0;i能不能说清楚一点,是加密吗?#include#include#defineMAXSIZE81intmain(){charstr[MAXSIZE];inti;intof…

E2017E0605-hm

carbon copy  抄送, 抄写与送达 blind carbon copy 密送blind adj. 失明的; 盲目的&#xff0c;轻率的;contact n. 接触; 触点 v 联系&#xff0c;接触;digit n. 数字; 手指&#xff0c;足趾; 一指宽;转载于:https://www.cnblogs.com/lancgg/p/8281818.html

php 与 python对接_关于PHP调用Python的实施以及配置

这是一份经过实验而来的经验总结&#xff0c;在试验的过程中曾经思考采用CGI的方式。毕竟是在windows的环境下&#xff0c;未能在linux的环境下测试CGI的方案是否可靠。可喜的是&#xff0c;通过CGI方案的配置后最终实现了PHP对Python文件的调用。接下来我将解析配置内容以及实…

Java正则表达式库基准测试– 2015年

在尝试使Java在计算机语言基准测试游戏的regexdna挑战中排名第一时&#xff0c;我正在研究Java正则表达式库的性能。 我可以找到的最新网站是2010年的tusker.org 。因此&#xff0c;我决定使用Java Microbenchmarking Harness重做测试并发布结果&#xff08;破坏性警告&#xf…

C语言写程序注意,单片机C语言编程应注意的若干问题

作为一种结构化的程序设计语言&#xff0c;C语言的特点就是可以使你尽量少地对硬件进行操作&#xff0c;具有很强的功能性、结构性和可移植性&#xff0c;常常被优选作为单片机系统的编程语言。但是基于单片机的C语言和标准C语言有很大区别&#xff0c;如何结合单片机的系统资源…