返回总目录页

python命令行传参详解,optparse模块OptionParse类的学习

 

官网链接: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消息

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

 

 

 



 

posted @ 2021-08-22 01:45  马昌伟  阅读(1448)  评论(0编辑  收藏  举报
博主链接地址:https://www.cnblogs.com/machangwei-8/