官网链接: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. 深入剖析 Java 类属性与类方法的应用

    Java 类属性 Java 类属性,也称为字段,是类中的变量.它们用于存储与类相关的数据. 创建类属性 在类定义中声明属性: public class Main { int x; // 属性 Stri ...

  2. C# Break 和 Continue 语句以及数组详解

    C# Break 它被用于"跳出" switch 语句. break 语句也可用于跳出循环. 以下示例在 i 等于 4 时跳出循环: 示例: for (int i = 0; i & ...

  3. FreeMarker 去除循环末尾的符号

    在使用 FreeMarker 模板引擎来生成文件时,经常会使用到 list 标签用于循环生成. 有时会遇到需要处理末尾符号的情况,比如 Json 文件,循环生成的标签中末尾是不需要 , 的,例如: & ...

  4. HMS Core Discovery第16期直播预告|与虎墩一起,玩转AI新“声”态

    [导读] 随着人工智能不断发展,机器学习技术也开始被广泛地应用到教育.金融.零售.交通.医疗等各个领域,给我们的生活带来巨大的便利.本期Discovery直播以<与虎墩一起,玩转AI新" ...

  5. echarts X轴类目名太长时隐藏,hover时显示全部

    echarts图表X轴 在柱状图中,X轴类目名如果数据太长: echarts会默认进行隐藏部分字段: 如果我们想让每一个类目名都显示出来,需要进行额外的处理 X轴类目名太长时,默认只显示一部分类目名 ...

  6. 【鸿蒙千帆起】《钢岚》成为首款基于HarmonyOS NEXT开发的战棋新游

      近日,紫龙游戏旗下BlackJack工作室全新战棋旗舰作品<钢岚>在华为游戏中心首发上线,并宣布<钢岚>完成鸿蒙原生应用开发,成为基于HarmonyOS NEXT开发的首款 ...

  7. mysql 必知必会整理—子查询与连接表[八]

    前言 简单介绍一下子查询与连接表. 正文 什么是子查询呢? 列出订购物品TNT2的所有客户. select cust_id from orders where order_num IN (SELECT ...

  8. HarmonyOS 性能优化

    如何合理使用动效来获得更好的性能 组件转场动画使用 transition: 推荐使用转场动画(transition)而不是组件动画(animateTo),因为 transition 只需要在条件改变时 ...

  9. 力扣278(java&python)-第一个错误的版本(简单)

    题目: 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个版本 ...

  10. 一个好的科技公司logo长这样!

    ​简介:一个好的科技logo能体现出行业独有的专业性和技术优势,让你的公司科技感加满! 近年来,越来越多的初创公司崭露头角,其中科技互联网公司的比重非常高.小云也收到很多朋友的留言,询问科技类公司应该 ...