python中parse是什么_Python中optparse模块使用浅析

最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a选项会响应。optparse模块实现的也是类似的功能,它是为脚本传递命令参数。

使用此模块前,首先需要导入模块中的类OptionParser,然后创建它的一个实例(对象):

复制代码 代码如下:

from optparse import OptionParser

parser = OptionParser() #这里也可以定义类的参数,后续有

接着就可以添加选项了,基本语法:

复制代码 代码如下:

parser.add_option(opt_str, ...,

attr=value, ...)

每个opt_str可以有多个选项字符串,比如-f 和--file(就行Linux命令行中ls -a和ls --all效果一样),只要定义了这些选项,则在命令行输入的时候这些选项就会被识别,否则报错。opt_str的定义可以如下:

复制代码 代码如下:

parser.add_option("-f", "--file", ...) #-f 和 --file 是作为调用时的参数的标签,会被识别

当选项被定义好后,则可以调用parse_args()函数来获取我们定义的选项和参数

复制代码 代码如下:

(options, args) = parser.parse_args() #parse_args可以有参数,不定义的话使用默认的sys.argv[1:]

parse_args()返回两个值,一个是选项options(如:-f),另一个是参数args,即除选项options以外的值(如:test.txt)

add_option中最重要的四个option的属性是:action,type,dest(destination),help。这四个中action又是最基础的。

action参数(附带介绍了type、dest):

action参数告诉optparse该做什么当它在命令行中遇到选项时。action有三种存储方式:store、store_false、store_true。如果不指定action的值,默认的是store,它告诉optparse将继续读取下一个参数(type),保证类型的正确性,并将它将值存储在一个变量(dest)中,即将命令行中输入的字符串将它存为options的属性,这样可以直接调用。啰嗦了一大堆,我自己都被搞晕了~~~~,先看个例子吧!

复制代码 代码如下:

>>> parser.add_option("-f", "--file",action="store", type="string", dest="filename")

< Option at 0x2d72f48: -f/--file>

>>> args = ["-f", "foo.txt"] #这个是模拟命令行的输入

>>> (options, args) = parser.parse_args(args)

>>> options.filename

'foo.txt'

上述:当optparse看到选项-f时,它将继续读下一个参数是foo.txt,并将它存储在options.filename(这个filename就是add_option中的dest),之后dest的值将作为parser的属性被存储。所以,当调用parse_args函数时,options.filename的值就是foo.txt。这个是以“string”类型存储的,当然type也可以是int和float等,比如下面的:

复制代码 代码如下:

parser.add_option("-n", type="int", dest="num")

注意,这个没有指定一个长字符串的选项(如:--number),这当然是可以的,不过命令行输入时选项就只能是-n了,也没有指定action,使用默认的“store”。再次使用模拟的命令行参数["-n22"](一个参数),也可以写成["-n 22"](作为两个参数来传递):

复制代码 代码如下:

>>> parser.add_option("-n", type="int", dest="num")

< Option at 0x2d71308: -n>

>>> (options, args) = parser.parse_args(["-n22"])

>>> print options .num

22

如果不指定type参数,默认的是string类型,所以一个最简单的方式可以写成这样:

复制代码 代码如下:

parser.add_option("-f", dest="filename")

action另两种值分别是:“store_true”和“store_false”,这一般作为一个标记使用,例如开始运行一个程序时将flag设为True,退出时将flag设为False。看了下面的例子就全明白了:当选项遇到v时,它将options.verbose设为True,当选项遇到q时,它将options.verbose设为False:

复制代码 代码如下:

>>> from optparse import OptionParser

>>> parser=OptionParser()

>>> parser.add_option("-v", action="store_true", dest="verbose")

< Option at 0x2ceb888: -v>

>>> parser.add_option("-q", action="store_false", dest="verbose")

< Option at 0x2d68e48: -q>

>>> fakeArgs = ['-v','hello']

>>> options, args = parser.parse_args(fakeArgs)

>>> options.verbose

True

>>> fakeArgs = ['-q','bye bye']

>>> options, args = parser.parse_args(fakeArgs)

>>> options.verbose

False

#如果同时写两个选项v和q,它会以哪个为准呢,我试了一下,是以最后出现的为准,呵呵~~

>>> fakeArgs = ['-q','bye bye','-v','hello']

>>> options, args = parser.parse_args(fakeArgs)

>>> options .verbose

True

Default参数:

default参数很好理解了,即当没有指定dest的值时,给出个默认值,如下:

复制代码 代码如下:

>>> parser.add_option("-x", action="store", dest="verbose", default="hahaha")

< Option at 0x2d77148: -x>

>>> options, args = parser.parse_args() #这里没有传参数

>>> options.verbose

'hahaha'

如果这样的话,那下面这两句的效果就一样了(前提是不给parse_args()函数传参:)

复制代码 代码如下:

parser.add_option("-v", action="store_true", dest="verbose")

parser.add_option("-q", action="store_false", dest="verbose", default=True)

help参数:

这个参数是为了让我们定义的“命令”更为逼真,还提供了帮助消息了呢!呵呵~~简单用法如下:

复制代码 代码如下:

>>> from optparse import OptionParser

>>> usage = "myprog[ -f ][-s ] arg1[,arg2..]"

>>> parser=OptionParser(usage) #这里为类添加了参数usage

>>> optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName",help="no any help")

< Option at 0x2bdb888: -f/--file>

>>> fakeArgs = ['-f','file.txt']

>>> options, args = parser.parse_args(fakeArgs)

>>> options.fileName

'file.txt'

>>> parser.print_help()

Usage: myprog[ -f ][-s ] arg1[,arg2..]

Options:

-h, --help show this help message and exit #此两行根据option自动生成,比较智能额~~

-f FILENAME, --file=FILENAME

no any help #这是我定义的帮助信息(呵呵,不太友好~~)

>>> parser.print_usage()

Usage: myprog[ -f ][-s ] arg1[,arg2..] #这是类的usage信息~~很逼真,有木有?

>>>

上述是介绍基本的语法,下面举两个例子,一个是网上找的一个模拟命令行的参数的例子,另一个是“真实”的例子~~~

Example1:

复制代码 代码如下:

from optparse import OptionParser

usage = "myprog[ -f ][-s ] arg1[,arg2..]"

optParser = OptionParser(usage)

optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName")

ooptParser.add_option("-v","--vison", action="store_false", dest="verbose",default='None',

help="make lots of noise [default]")

fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

options, args = optParser.parse_args(fakeArgs)

print options.fileName

print options.verbose

print options

print args

print optParser.print_help()

运行结果是:

复制代码 代码如下:

file.txt

False

{'verbose': False, 'fileName': 'file.txt'}

['this is some what', 'arg2', 'arge']

Usage: myprog[ -f ][-s ] arg1[,arg2..]

Options:

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

-f FILENAME, --file=FILENAME

-v, --vison make lots of noise [default]

Example2:

一个简单的例子,就是将给脚本传选项n时,则输出的是n的参数的值,否则给出默认值(脚本保存在E盘):

复制代码 代码如下:

from optparse import OptionParser

optParser = OptionParser()

optParser.add_option("-n","--number",action = "store",type="int",dest = "intNumber")

optParser.add_option("-v","--version", action="store_false", dest="verbose",default='gggggggg',help="no help")

options, args = optParser.parse_args()

if options.intNumber is not None: #当有选项n时,则使用给出的参数值

#num = options.intNumber

print options.intNumber,options.verbose

else:

for i in range(1,5): #不给选项n的情况下,默认输出的是1~4

#num = i

print i

打开cmd运行如下:

201511124235927.jpg?201501124252

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

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

相关文章

Topshelf创建Windows服务

入门例子 using log4net; using System; using System.Timers; using Topshelf;namespace ConsoleAppTest {class Program{static void Main(string[] args){log4net.Config.XmlConfigurator.Configure();HostFactory.Run(x >{x.Service<TownCrier>();x.RunAsLocalSys…

jsp网页中的换行

JSP网页中输出换行在一开始学习的时候困扰了我不短的时间&#xff0c;因为一些排版需要换行总是很难实现&#xff0c;随着学习&#xff0c;找到了如下几种方法做到换行&#xff0c;以保持页面的美观。 代码和截图我给放在下面了&#xff0c;附了注释: 代码如下&#xff0c;想…

npu算力如何计算_CPU、GPU、NPU、FPGA等芯片架构特点分析

来源 | 汽车电子与软件知圈 | 进“高精度地图社群”&#xff0c;请加微信15221054164&#xff0c;备注地图概述随着人工智能的热潮和AI算法的广泛应用&#xff0c;深度学习已成为当前AI研究的重点&#xff0c;在自动驾驶领域&#xff0c;环境感知、传感器融合、控制决策等等都会…

Eclipse——恢复的默认窗口设置篇

你可能也会像我一样&#xff0c;时不时不小心把一些窗口关掉了&#xff0c;然后想要改回来的时候&#xff0c;又要疯狂的去设置里把它们一个个的显示出来&#xff0c;大概率的还可能得百度一下&#xff0c;看着英文单词有时候就会烦躁。 直接崩溃&#xff1a; 这里一招教你直…

翻牌游戏如何打乱牌面java_家长专栏提高儿童记忆力的游戏训练

记忆是人脑对过去经验的保持和再现。记忆过程包括三个基本环节&#xff0c;即识记、保持、再认或回忆。识记是识别和记住事物。保持是将已获得的知识或经验巩固与保留在大脑中。再认是指过去经历过的事物再度出现时&#xff0c;能将它指认出来。回忆是指过去经历过的事物不在面…

Leetcode 206. Reverse Linked List

Similar Questions Reverse Linked List II Binary Tree Upside Down Palindrome Linked List思路&#xff1a;链表反转。 解法一&#xff1a;迭代。 添加头节点&#xff08;推荐&#xff09;&#xff1a;不断将当前元素start插入dummy和dummy.next之间&#xff0c;实现反转。…

java中输出系统时间

老用老忘&#xff0c;乐此不疲 自己给自己写个模板&#xff0c;忘了随时copy也很香&#xff0c;不是吗&#xff1f; 不说废话了&#xff0c;上代码: package java操作的复习;import java.text.SimpleDateFormat; import java.util.Date;public class SystemTime {public sta…

centos redis make 报错_Redis入门安装,你只需要看我写的这篇就行了

今天来写点基础的东西&#xff0c;可能很多初学者不太会装Redis&#xff0c;这篇文章主要是分享一下如何在Linux中安装redis服务。1. Redis的介绍Redis是一种非关系型数据库(NoSQL)&#xff0c;NoSQL是以key-value的形式存储&#xff0c;和传统的关系型数据库不一样&#xff0c…

四舍六入五凑偶原则

写物理实验报告遇到的&#xff0c;给自己的记忆存个档&#xff0c;下次遇到不迷路 1 2

axios某一接口失败后不调用_axios 源码系列之如何取消请求

我们在前后端交互的过程中&#xff0c;通常是通过请求接口来实现的&#xff0c;而一个页面中的交互又非常复杂&#xff0c;例如需要多次频繁请求同一个接口&#xff0c;或者在接口还没返回时就要切换路由等。这些都需要对接口请求的时机或者请求接口之后进行处理&#xff0c;避…

函数调用关系图如何画_程序是如何在 CPU 中运行的(二)

笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~ 前言 在上一篇文章中《程序是如何在 CPU 中运行的(一)》笔者讲述了程序中一条一条指令以及一条一条数据是如何在 CPU 中运行的,在本文笔者将以 ARM Cortex M3 的内核为背景分析指令是…

电脑功耗监测_应急监测便携式VOC检测仪色谱分析仪原理解析

对目前越来越多的应急测试要求&#xff0c;应急监测便携式VOC检测仪色谱分析仪的发展日趋迅猛和成熟。而仪器的体积和重量一直制约着应急监测便携式VOC检测仪色谱分析仪的发展&#xff0c;Model 3200打破了传统色谱仪的桎梏&#xff0c;将便携式标气、便携式电脑工作站、在线VO…

L1-058 6翻了 (15 分)

题目复制不太好看&#xff0c;我直接给截图了&#xff0c;如上: 究其本源&#xff0c;pta L1的题目主要侧重于对字符串处理的考察&#xff0c;可以说拿下字符串&#xff0c;pta L1的题目百分之八十五的部分基本上都不会难倒你了&#xff0c;所以要在做题的时候注意积累。这里是…

N皇后问题12 · N-Queens

&#xff3b;抄题&#xff3d;&#xff1a; n皇后问题是将n个皇后放置在n*n的棋盘上&#xff0c;皇后彼此之间不能相互攻击。 给定一个整数n&#xff0c;返回所有不同的n皇后问题的解决方案。 每个解决方案包含一个明确的n皇后放置布局&#xff0c;其中“Q”和“.”分别表示一个…

L1-059 敲笨钟 (20 分)

题目截图如下,也可以跳转下方这个链接去pta平台自己测试一下: L1-059 敲笨钟 (20 分) 代码如下&#xff0c;部分关键注释已经在代码中标明: #include<bits/stdc.h> using namespace std; int main() {int n;string s;cin>>n;getchar(); //也可以使用cin.ignore()…

web前端表格css三个t的使用(thead,tbody,tfoot)

其实从这三个词的翻译上&#xff0c;也可以知道他们的使用用途&#xff1a; thead&#xff08;表格头&#xff09;tbody&#xff08;表格主体&#xff09;tfoot &#xff08;表尾&#xff09; 话不多说&#xff0c;先上效果图: 具体使用看见代码演示: <html> <head…

Vue框架之条件与循环的使用

如果是初学者的话&#xff0c;这里先给你一个基础知识的框图&#xff0c;可以了解一下下面代码的由来。 也可以选择我这个链接Vue条件与循环跳转到Vue官网进行学习。 上面是Vue的一个简单案例&#xff0c;不要急&#xff0c;进阶版来了&#xff0c;通过这个框架应用到你的表格…

git连接jenkins_开普勒云平台:如何配置gitlab与Jenkins

一、Kplcloud是什么?kplcloud是一个基于Kubernetes的轻量级PaaS平台&#xff0c;通过可视化的界面对应用进行管理&#xff0c;降低应用容器化的对度&#xff0c;从而减少应用容器化的时间成本。Kplcloud已在宜信服务于宜人财富等多个团队&#xff0c;稳定运行了近两年&#xf…

Eclipse查找文件存储路径

1.打开Eclipse&#xff0c;去找导航栏 2.点击file 3.点击properties 4.即可看到存储路径 5.可以点击存储路径找到该文件在电脑的储存位置 从此上传作业&#xff0c;找不到文件位置不再是烦恼。

专业对不对口重要吗_应届生求职,专业对口到底重不重要?

18年&#xff0c;智联招聘发布的《2018年大学生求职指南》显示&#xff0c;近四成毕业生就业岗位和在校专业不对口。同时&#xff0c;LinkedIn&#xff08;领英&#xff09;通过调查15万份用户档案分析发现&#xff0c;第一份工作的专业对口比例&#xff0c;95后只有28.8%。&am…