python中的命令行参数_python学习笔记6:命令行参数

1. 使用步骤

使用步骤如下:

# 导入模块

import argparse

# 获取parser, description文本会显示在help信息中

parser = argparse.ArgumentParser(description='args discrip')

# 添加选项, 具体选项类型见后面各节

parser.add_argument('-a')

# 解析选项

args = parser.parse_args(sys.argv[1:])

# 使用选项

print(args.a)

对sys.argv[1:]的说明:

sys.argv # 一个列表,存储命令行参数.

sys.argv[0] # 脚本名.

sys.argv[1:] # 命令行参数.

sys.argv[1][2:] # 截取第一个参数第2bit之后的内容;

2. 位置参数

# 位置参数可以实现类似于vcs a.v b.v的选项处理,

# 如下例, vfiles是位置参数,不需要使用'-vfile 或者-xx'这种形式指定选项内容;

# default=[] 表示默认参数为空list;

# nargs='*' 表示可以是0个或多个参数;

>>> parser.add_argument('vfiles', type=str,default=[], nargs='*')

_StoreAction(optine_strings=[], dest='vfiles', nargs='*', const=None, default=[], Type=, choices=None, help=None, metavar=None)

3. flag类型的选项(选项本身无参数)

flag类型选项本身无参数, 根据"命令行是否有该选项" 和 "该选项声明值/默认值" 来决定选项实际值(注意, 并不是声明选项, 则该选项为True, 不声明为False, 而是内部可配置):

>>> parser.add_argument(

... '-a', # 选项名称

... action='store_true', # 如果声明-a, 则a=True;

... default=False # 如果不声明-a, 则(默认)a=False;

... )

_StoreTrueAction(optine_strings=['-a'], dest='a', nargs=0, const=True, default=False, Type=None, choices=None, help=None, metavar=None)

>>>

>>> parser.add_argument(

... '-b',

... '--b_long_opt', # b有额外的长选项名称: --b_long_opt

... action='store_false', # 如果声明-b, 则b=False

... default=True, # 如果不声明(默认)-b, 则b=True

... dest='b_new_name' # 内部使用b_new_name取用该选项(而不能使用b)

)

_StoreTrueAction(optine_strings=['-b', '--b_long_opt'], dest='b_new_name', nargs=0, const=False, default=True, Type=None, choices=None, help=None, metavar=None)

注意,不会有以下两种情况,因为这两种情况下,无论选项是否定义,内部得到的值都一样,没有意义;

>>> # action='store_true', default=True,声明选项和默认值都是True

>>> # action='store_false', default=False,声明选项和默认值都是False

通过parse一个内部数组来进行验证,实际使用中是parse真正的命令行数组sys.argv[1:], 注意sys.argv[0]表示的是脚本名称;

测试1:#-a -b都没声明,所以都是default值

>>> lst_args=[]

>>> args = parser.parse_args(lst_args)

>>> args.a # 未声名-a,所以args.a的值为default值False;

False

>>> args.b_new_name # 未声名-b,所以args.b_new_name值为默认值True;

True

>>> args.b # 由于使用了dest, 所以args.b会报错, 只能使用args.b_new_name获取

AttributeError: 'Namespace' object has no sttribute 'b'

测试2:-a -b都声明,所以都是action store值

>>> lst_args=['-ab'] # -a和-b是短选项, 可以合并使用'-ab'表示'-a' '-b'

>>> args = parser.parse_args(lst_args)

>>> args.a # 声名了-a,所以args.a的值为声明值True;

True

>>> args.b_new_name # 声名了-b,所以args.b_new_name值为声明值False;

False

测试3:使用长选项,-a -b都声明,所以都是store值

>>> lst_args=['-a', '--b_long_opt'] # --b_long_opt是长选项, 需要使用双短线('--')进行声明

>>> args = parser.parse_args(lst_args)

>>> args.a # 声名了-a,所以args.a的值为声明值True;

True

>>> args.b_new_name # 声名了-b,所以args.b_new_name值为声明值False;

False

4. 必选选项(选项必须声明, 不声明会报错)

>>> parser.add_argument(

... '-c', # 选项名称

... type=int, # 选项类型是整数

... required=True # 选项是必选选项

)

_StoreAction(optine_strings=['-c'], dest='c', nargs=None, const=None, default=None, Type=, choices=None, help=None, metavar=None)

>>>

>>> # 选项-c必须声明,否则报错:error:the following argument are required:-c

>>> lst_args=['-c', '3']

>>> args = parser.parse_args(lst_args)

>>>

>>> # 选项-c类型为int,所以str '3'传到args.c时,会转类型为int 3;

>>> print(args.c)

3

5. 可选选项,可带默认值

-d 为str类型的可选选项,默认值为'default_d'

-d 为str类型的可选选项,默认值为'default_d'

>>> parser.add_argument(

... '-d', # 选项名

... type = str, # 选项类型

... required = False, # '-d'是可选选项

... default = 'default_d' # '-d'不声明时, 默认值为'default_d'

)

_StoreTrueAction(optine_strings=['-d'], dest='d', nargs=None, const=None, default='default_d', Type=, choices=None, help=None, metavar=None)

>>>

>>> lst_args=['-c', '4', '-d', '5'] # -c 必选, -d 可选

>>> args = parser.parse_args(lst_args)

>>> args.c # 选项-c为必选,类型为int

4

>>> type(args.c)

>>>

>>> args.d # 选项-d为可选,类型为str

'5'

>>> type(args.d)

6. 长选项

>>> parser.add_argument(

... '--e_long_opt' , # 表示长选项

... type=str , #

... required=False , #

... default=[] , #

... nargs='+' , # 表示--e_long_opt这个选项后面可以有多个参数

)

_StoreTrueAction(optine_strings=['--e_long_opt'], dest='e_long_opt', nargs='+', const=None, default=[], Type=, choices=None, help=None, metavar=None)

>>>

>>> # --e_long_opt 带了两个参数 'opt_e0', 'opt_e1'

>>> lst_args=['-c', '4', '--e_long_opt', 'opt_e0', 'opt_e1']

>>>

>>> args = parser.parse_args(lst_args)

>>>

>>> # --e_long_opt的两个参数组成一个list赋值给args.e_long_opt;

>>> args.e_long_opt

['opt_e0', 'opt_e1']

7. 列表选项

nargs='+' 表示当前选项可以有多个参数, 这些参数组成一个list, 例子见上一节.

8. 未知选项

如果sys.argv[1:]中出现了"位置选项123" 或 "命名选项–f 456",但"123" 或"-f"选项没有定义在add_argument()中时,直接使用parser.parse_args()会报告错误:

error: unrecognized arguments: 123 –f 456;

这时需要使用parser.parse_known_args()这个方法(而不是parser.parse_args()这个方法)。

>>> lst_args = ['-a', '123', '-f', '456']

>>> parser.add_argument('-a', action='store_true',default=False)

>>>

>>> args, unknown_args = parser.parse_known_args(lst_args)

>>>

>>> args

Namespace(a=True)

>>> args.a # args得到的值与parser.parse_args()的返回值一致

True

>>>

>>> unknown_args # unknown_args得到的是处理完定义过的args后,剩下的选项;

['123', '-f', '456']

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

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

相关文章

php 年的第几天,收藏-php中某年第几天计算出日期年月日的代码

很实用的小功能,希望对大家有帮助。这个索引值除了方便面数据的记录和搜索,还起着记录日期信息的作用,信息量很可观。那么,如何还原索引值为可用的日期资讯呢?date(z)返回的是一年中的第几天,返回值为从0开…

shell tr 替换 空格_Shell 字符串分隔符!!!(全网最详细总结)

前言:在shell脚本编程中,我们经常会用到切割字符串,类似于python中的split。但shell中的命令比较五花八门,小编也是苦扰了很久,终于下定决心对它做一个总结。方法一:字符串替换法#/bin/bashstring"Hel…

php where 不包含,php – 除非它们包含“where”或“like”子句,否则不允许删除

我的查询 –$shortlistpartners是数组$this->db->delete(shortlist_partners);$this->db->where(opp_id,$this->input->post(opp_id));$this->db->where_in(partner_id,$shortlistpartners);除非它们包含“where”或“like”子句,否则不允许删除.错误即…

本机用域名不能访问_域名注册申请网站域名注意事项

互联网用户越来越多,也有越来越多人搭建网站,做个人博客也好、搭建企业官网也好,数量都在逐步上升。做网站的数量在上升,域名注册量肯定也在上升。有的朋友头一次注册域名,对域名不了解也不知道申请网站域名该注意哪些…

电脑微信不用手机确认_不用安装第三方软件,手机投屏到电脑就这么简单

在头条上收到网友的提问,如果想把手机的内容投影到电脑上,该怎么做?为此我做一个简单的教程,不用安装第三方软件,就用Windows 10自带的无线显示功能和安卓手机的自带无线显示功能来实现。前提条件:1. 电脑是…

php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解

一、创建项目作为演示,我们在www根目录创建项目grabimg,创建一个类GrabImage.php和一个index.php。二、编写类代码我们定义一个和文件名相同的类:GrabImageclass GrabImage{}三、属性接下来定义几个需要使用的属性。1、首先定义一个需要抓取的…

tomcat7 https 拒绝连接_物与网怎么连接呢?物联网架构及五大通信协议

消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网。柳猫将阐述移动互联网消息推送技术在物联网中的应用和演进。一、物联网架构和关键技术从开发的角度,无线接入是物联网设备端的核心技术,身份设备…

安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...

5月已经过去,同时也标志着今年上半年手机的发布已经告一段落。那么在这段时间里,智能手机的性价比如何呢?考虑到现在已经开始步入5G时代,所以智能手机的价格也是普遍上涨,想要找到一款性价比不错的手机似乎有些难度。现…

noclassdeffounderror java,从终端运行Java文件时出现java.lang.NoClassDefFoundError

我是Java新手。我一直在使用Eclipse测试一个简单的Java类(名为NewHelloWorld),它在控制台中运行良好。当我尝试从终端执行相同的操作时,它会正确编译(创建HelloWorld.class而不给出任何错误),但是随后javaNewHelloWorld显示以下错误Exception…

tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)

当两个线程相互等待对方释放资源时,就会发生死锁。Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁。一旦出现死锁,整个程序既不会发生任何异常,也不会给出任…

虚拟局域网软件开源_ZeroTier虚拟局域网免费远程桌面体验--替代TeamViewer

本文主要是关于使用ZeroTier创建虚拟局域网来实现免费远程桌面的方案的体验,包含了一些对不同方案的优缺点的描述。最近因为疫情在家不得不通过远程连接实验室电脑,有两种基本的解决方案:连接学校VPN,然后使用系统自带的远程桌面连…

java复制的函数会报错,2 面试题之面向对象

大纲:一、两个重要概念① 请说明类和对象的区别类是对某一类实物的描述,是抽象的;对象是一个实实在在的个体,是类的一个实例;② 解释一下什么是类加载机制、双亲委派模型,好处是什么?类加载机制…

从零开始学android编程_小白也能学得会!谷歌推出免费的Kotlin和Android开发课程...

程序员书库(ID:CodingBook) 猿妹编译链接:https://android-developers.googleblog.com/2020/07/learn-android-and-kotlin-with-no-experience.html5月份,微软刚推出了一套免费的Python在线视频课程,面向数据科学和机器学习初学者…

php ziparchive(),php的ZipArchive类用法实例

本文实例讲述了php的ZipArchive类用法,分享给大家供大家参考。具体如下:通常来说,php5.2开始支持ZipArchive类,php4只能使用zip函数。其实在官方实现zip类之前,已经有大牛贡献了打包解压zip文件的方法。现在php包含了Z…

sql 除以_不可思议的SQL排名函数,被您无视了么?

经常写SQL脚本的朋友,对查询的多样化要求可能会经常头疼。数据库SQL的语法是固定的、但应用要求却是千差万别的。依靠我们所掌握的知识,大部分的查询需求我们还是有办法的解决的,但总有那么一些要求,把我们搞的非常被动。今天我们…

自制hdmi线一头改vga图_VGA连接线接口定义及引线焊接教程,VGA线不够长时可用网线代替?...

最近做的多媒体功能插座,含有VGA、HDMI、网口、音频输入等接口,由于穿线时没有穿成品线缆,VGA和HDMI接头需要焊接,那么怎么焊接呢?VGA接口15根针,其对应接口定义如下,其下图:一般在V…

sql 分组求和_数据仓库工具–Hive(归纳笔记第六部分:SQL练习)

写在开头:本章是Hive教程第六部分,着重于归纳SQL编写。文章内容输出来源:拉勾教育大数据高薪训练营。本章将介绍Hive中常见的面试题和自己的解答思路,以供大家训练和记忆。SQL面试题1、求连续7天登录的用户— 数据。uid dt status…

Tableau上面地图与条形图结合_何为计算的详细级别,认识Tableau中的Level of Detail...

何为详细级别详细级别,英文Level of detail,Tableau用它来描述计算发生的级别,或者说计算在哪个层级发生。由于BI工具的相似性,在Power BI里也可以用类似的思想对计算进行描述,但Power BI并没有与之对应的专门的词汇。…

java 异步读表,Java实现异步回调-Go语言中文社区

回调(callback)在我们做工程过程中经常会使用到,今天想整理一下回调的原理和使用方法。回调的原理可以简单理解为:A发送消息给B,B处理完后告诉A处理结果。再简单点就是A调用B,B调用A。那么是如何实现的呢?一般而言&…

matlab207a,MATLAB教程R2012a课后习题答案

错误发生的根源,并改正之。〖目的〗● 正确理解sum 的工作机理。 ● reshape 的应用。 〖解答〗(1)企图用以下程序完成题目要求。for k10:-1:1 Areshape(1:10*k,k,10);Sa(k,:)sum(A);end Sa Sa 55 55 55 55 55 55 55 55 55 55 3 7 11 15 19 23 27 31 35 39 6 15 24 …