官网链接:https://docs.python.org/3/library/optparse.html

https://docs.python.org/2/library/argparse.html

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
(options, args) = parser.parse_args()
print(options,type(options),args,type(args)) #print(type([])) 结果:<class 'list'>

options,是个类,dest是键值对里的键,值是None,args是列表,空

没传参的时候

-f 空格指定字符串,会将它作为dest里filename的值,

我再加一个短横线,结果还是可以的  --f

使用--file 也可以

其它字符串,不在--file后的那个,无论在它前面还是后面,都加进了args列表里。

临时给程序加个-m

也是可以用的

后面再用这个的,被覆盖掉了

代码现在如下,调用它的值

调用它的值,点来调用

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
(options, args) = parser.parse_args()
with open('%s'%options.filename,mode='w',encoding='utf-8') as f:
f.write('我是小马过河')
if "mcw" in args:
print('欢迎mcw',args)

  这样就可以指定文件做操作,传参中有啥参数也可以做对应参数了。

-h或者--help可以查看帮助信息,指定参数的介绍信息

添加-q参数,多了一组键值对,命令行加上-q值是假,不加也就是默认是真。(自解:可用于某个功能或其它是否开启或其他并给出默认状态)

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
(options, args) = parser.parse_args()
print(options,args)

代码

官网介绍

optparse是一个比旧getopt模块更方便、灵活和强大的命令行选项解析库。 optparse使用更具声明性的命令行解析风格:创建 的实例 OptionParser,用选项填充它,然后解析命令行。optparse允许用户在传统的 GNU/POSIX 语法中指定选项,并额外为您生成使用和帮助消息。

这是optparse在简单脚本中使用的示例:

from optparse import OptionParser
...
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout") (options, args) = parser.parse_args()
使用这几行代码,您的脚本用户现在可以在命令行上执行“常规操作”,例如: <yourscript> --file=outfile -q
当它解析命令行时,根据用户提供的命令行值optparse设置options返回的对象的属性 parse_args()。当parse_args()解析此命令行返回时,options.filenamewill be"outfile"并且options.verbosewill be False。 optparse支持长选项和短选项,允许将短选项合并在一起,并允许选项以多种方式与其参数相关联。因此,以下命令行都等效于上面的示例: <yourscript> -f outfile --quiet
<yourscript> --quiet --file outfile
<yourscript> -q -foutfile
<yourscript> -qfoutfile
此外,用户可以运行以下之一 <yourscript> -h
<yourscript> --help
并且optparse将打印出你的脚本选项的简介: Usage: <yourscript> [options] Options:
-h, --help show this help message and exit
-f FILE, --file=FILE write report to FILE
-q, --quiet don't print status messages to stdout
其中yourscript的值是在运行时确定的(通常来自 sys.argv[0])。

官网介绍

<yourscript> --file=outfile -q

因此,以下命令行都等效于上面的示例:

<yourscript> -f outfile --quiet
<yourscript> --quiet --file outfile
<yourscript> -q -foutfile
<yourscript> -qfoutfile

首先,需要导入OptionParser类;然后,在主程序的早期,创建一个 OptionParser 实例:

from optparse import OptionParser
...
parser = OptionParser()
然后您可以开始定义选项。基本语法是: parser.add_option(opt_str, ...,
attr=value, ...)
每个选项都有一个或多个选项字符串,例如-f或--file,以及几个选项属性,用于告诉optparse在命令行上遇到该选项时会发生什么以及要做什么。 通常,每个选项都有一个短选项字符串和一个长选项字符串,例如: parser.add_option("-f", "--file", ...)
您可以随意定义任意数量的短选项字符串和任意数量的长选项字符串(包括零),只要总体上至少有一个选项字符串即可。 传递给的选项字符串OptionParser.add_option()实际上是该调用定义的选项的标签。为简洁起见,我们会经常提到 在命令行中遇到一个选项;实际上,optparse 遇到选项字符串并从中查找选项。 定义所有选项后,指示optparse解析程序的命令行: (options, args) = parser.parse_args()
(如果您愿意,可以将自定义参数列表传递给parse_args(),但这很少需要:默认情况下它使用sys.argv[1:]。) parse_args() 返回两个值: options, 一个包含所有选项值的对象——例如,如果 --file采用单个字符串参数,options.file则将是用户提供的文件名,或者None如果用户没有提供该选项 args,解析选项后剩余的位置参数列表 本教程部分仅涵盖四个最重要的选项属性: action、type、dest (目的地)和help。其中,action是最基本的。

官网介绍2

最常见的选项操作是store,它告诉optparse采用下一个参数(或当前参数的其余部分),确保它的类型正确,并将其存储到您选择的目的地。

例如:

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

模拟传参,假的传参,结果一样

终端上效果一致的传参,不用创建列表,将列表传进去,貌似argv[1:]的参数就是一个列表,默认传递到parse_args方法中,遇到定义的-f之类的,就会将后面那个值存到dest中,作为定义的dest的值,而其它没用add_option的就传到args列表中

不加类型,传递的是字符串。action默认是store,可以不填

要想传递进去是个数字,就要加类型的参数是int

还可以拼接在一起传参

之前的也可以简写:也可以拼在一起传参

选项参数是42 选项卡是-n               这一次,我们将选项参数与选项卡在一起:因为-n42(一个参数)等价于 (两个参数),代码-n 42 传递进的是["-n42"]

 -q没有默认值,不传参就是None,传了参数就是false

可以引号引起来当成一个

选项卡刚刚试了试可以是传字母数字字符串,但是-只能加一个字符串,;要想用多个字符串,必须用--添加长字符串

optparse自动生成帮助和使用文本的能力对于创建用户友好的命令行界面非常有用。您所要做的就是help为每个选项提供一个值,并可选择为整个程序提供一个简短的使用消息。这是一个填充了用户友好(记录)选项的 OptionParser:

usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
parser.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=True,
help="make lots of noise [default]")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose",
help="be vewwy quiet (I'm hunting wabbits)")
parser.add_option("-f", "--filename",
metavar="FILE", help="write output to FILE")
parser.add_option("-m", "--mode",
default="intermediate",
help="interaction mode: novice, intermediate, "
"or expert [default: %default]")

官网帮助信息生成

from optparse import OptionParser
parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
parser.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=True,
help="make lots of noise [default]")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose",
help="be vewwy quiet (I'm hunting wabbits)")
parser.add_option("-f", "--filename",
metavar="FILE", help="write output to FILE")
parser.add_option("-m", "--mode",
default="intermediate",
help="interaction mode: novice, intermediate, "
"or expert [default: %default]")
(options, args) = parser.parse_args()
print(options,args)

执行生成帮助代码

定义帮助信息中%default会使用默认的值,%prog代表脚本名字,定义了Usage消息

至此,命令行传参大部分场景可以使用了,其它功能有时间再补充

python命令行传参详解,optparse模块OptionParse类的学习的更多相关文章

  1. 再探命令行传参之c与python

    继上一次java命令行传参 python sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:python解释 ...

  2. C#进阶系列——WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

  3. WebApi 接口参数不再困惑:传参详解

    阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的 ...

  4. WebApi接口传参不再困惑(4):传参详解(转载)

    WebApi接口传参不再困惑(4):传参详解   前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方 ...

  5. 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解

    原文地址:http://www.cnblogs.com/landeanfen/archive/2016/04/06/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参 ...

  6. C#WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

  7. [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解

    本文转自:http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_2 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作 ...

  8. Java小tips之命令行传参

    在命令行运行主函数时,后缀字符串,则会储存在args[]数组中,这种方法可以在程序运行时,借助Main函数传参 主类书写不规范见谅 ```java public class hello{ public ...

  9. Java方法:命令行传参,重载,可变参数,递归

    Java方法:System.out.println()//系统类.out对象.输出方法Java方法是语句的集合,他们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中 ...

  10. Day006 命令行传参

    命令行传参 有时候你希望运行一个程序时候再传递给它消息,这要靠传递命令行参数给main()函数实现. 使用方法 写测试代码. public static void main(String[] args ...

随机推荐

  1. Qt数据结构-QString二:QString的arg能不能像Python的format一样使用

    常规QString拼接字符串我们是这样写的 QString s = QString("My name is %1, age %2").arg("zhangsan" ...

  2. LLM应用实战:当KBQA集成LLM

    1. 背景 应项目需求,本qiang~这两周全身心投入了进去. 项目是关于一个博物馆知识图谱,上层做KBQA应用.实现要求是将传统KBQA中的部分模块,如NLU.指代消解.实体对齐等任务,完全由LLM ...

  3. 玩转HarmonyOS专项测试,轻松上架“五星”高品质应用

      作者:David,华为测试服务专家 随着信息技术的高速发展,移动应用与人们生活日益紧密,面向各类场景的应用层出不穷,什么样的应用更受用户青睐呢?在满足用户功能需求之上,一个好的应用要能运行稳定.流 ...

  4. Python 爬虫初探

    准备部分 0x01 爬虫的简介和价值 a. 简介 自动抓取互联网数据的程序,是基础技术之一 b. 价值 快速提取网络中有价值的信息 0x02 爬虫的开发环境 a. 环境清单 Python3.7 开发环 ...

  5. 重新点亮shell————管道和重定向[二]

    前言 简单介绍一下管道和重定向. 正文 管道和信号一样,是进程通信的方式之一 管道符是"|",将前一个命令执行的结果传递给后面的命令. 比如说: ls -l | more 就是第一 ...

  6. Flutter笔记-基础组件

    图片和Icon 加载网络图片以及本地图片 Image( image: NetworkImage( "https://img-s-msn-com.akamaized.net/tenant/am ...

  7. Kafka 的分片和副本机制

    我们在使用 Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如在日志收集场景,数据量是非常巨大的,例如大批量的集群每分钟产生的日志都能以 GB 计,所以如何将这么大的 ...

  8. 阿里大数据云原生化实践,EMR Spark on ACK 产品介绍

    开源大数据社区 & 阿里云 EMR 系列直播 第六期   主题:EMR spark on ACK 产品演示及最佳实践   讲师:石磊,阿里云 EMR 团队技术专家 内容框架: 云原生化挑战及阿 ...

  9. RedShift到MaxCompute迁移实践指导

    简介: 本文主要介绍Amazon Redshift如何迁移到MaxCompute,主要从语法对比和数据迁移两方面介绍,由于Amazon Redshift和MaxCompute存在语法差异,这篇文章讲解 ...

  10. 庖丁解牛|图解 MySQL 8.0 优化器查询转换篇

    ​简介: 本篇介绍子查询.分析表和JOIN的复杂转换过程 一  背景和架构 在<庖丁解牛-图解MySQL 8.0优化器查询解析篇>一文中我们重点介绍了MySQL最新版本8.0.25关于SQ ...