首页 > 编程 > Python > 正文

python optparse模块使用实例

2019-11-25 17:47:29
字体:
来源:转载
供稿:网友

使用命令行时,如果要添加选项的话,python 2.3里新增加了一个模块叫optparse,也是专门来处理命令行选项的。

复制代码 代码如下:

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-p", "--pdbk", action="store_true",
                  dest="pdcl",
                  default=False,
                  help="write pdbk data to oracle db")
parser.add_option("-z", "--zdbk", action="store_true",
                  dest="zdcl",
                  default=False,
                  help="write zdbk data to oracle db")

(options, args) = parser.parse_args()

if options.pdcl==True:
    print 'pdcl is true'
if options.zdcl==True:
    print 'zdcl is true'


add_option用来加入选项,action是有store,store_true,store_false等,dest是存储的变量,default是缺省值,help是帮助提示

最后通过parse_args()函数的解析,获得选项,如options.pdcl的值。
基本使用流程:

》1.生一 optparse.OptionParser 的物件。可以在生"程式的命令列明" (usage) 做,交 OptionParser 的建子:

复制代码 代码如下:

from optparse import OptionParser
    MSG_USAGE = "myprog[ -f <filename>][ -s <xyz>] arg1[, arg2...]"
    optParser = OptionParser(MSG_USAGE)

》2.呼叫 OptionParser.add_option() 加入接受的 option:
复制代码 代码如下:

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

action 有多,是 "store",所以即使省略也妨,其它的 action 在下面明。

若有一以上的 option,重覆上述的方式加入(注意:以下省略了 action ):

复制代码 代码如下:

optParser.add_option("-s",
                         "--someopt",
                         type = "string",
                         dest = "someopt")

》3.呼叫 OptionParser.parse_args() 行解。如果有入, OptionParser 以 sys.argv[1:] 象行解。OptionParser.parse_args() 回一 tuple,由 optparse.Values 和 一 list 所成。下例入一假造的列:
复制代码 代码如下:

fakeArgs = ['-f', 'thefile.txt', '-s', 'xyz', 'arg1', 'arg2', 'arge']
   
    options, args = optParser.parse_args(fakeArgs)
   
    print options.fileName
    print options.someopt
    print args

最後得到的出果:
复制代码 代码如下:

thefile.txt
    xyz
    ['arg1', 'arg2', 'arge']

是一的例,明了 OptionParser 的一般使用方式。透例子,可以看到如果程式加入 option, 且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() 有多用法,下面明一部份。

程式加入 flag option:

多的 Unix 命令有 "-v", "-q" 的 option,代表"提供息"或是"不示息"。要做到一,只要在程式中加入下列的 option :

复制代码 代码如下:

parser.add_option("-v", action="store_true", dest="verbose")
    parser.add_option("-q", action="store_false", dest="verbose")
    opts, args = parser.parse_args()

第一 add_option() 加入了一 "-v" 的 option;如果命令列中出了 "-v", opts.verbose 是 True;相反的,第二 add_option() 加入了一 "-q" option;如果命令列中出了 "-q", opts.verbose 是 False,者不相悖,程式可以成:收到 "-v" ,示息;收到 "-q" ,示概略息,或完全不示;者都有收到,示一般的息。

定 option 的值:

上述的例子都假命令例收到期中的 option,那如果有 option ,接收到的 option 值是什呢?答案是 None!如果想 option 提供值,只要在 OptionParser.parse_args()中指定 default 就行了:

复制代码 代码如下:

parser.add_option("-v", action="store_true", dest="verbose", default = True)
    parser.add_option("-q", action="store_false", dest="verbose")
    opts, args = parser.parse_args()

上述的程式程式加入了 option, "-v" 有出, opts.verbose 值 True; "-q" 被指定, opts.verbose 被定 False,和上一例子有不同。再看下一例子:
复制代码 代码如下:

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

opts.verbose 的值是什?答案是 True,最後一指定到同一目的 option 值被用。

一般的 option 亦可加入值:

复制代码 代码如下:

parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")

程式加入明:

的 Unix 命令大多有著 "-h", "--help" 的 option,使用明印出。在 OptionParser.parse_args() 中指定 "help" ,指定明的字串,就可以 option 加入明了:

复制代码 代码如下:

parser.add_option("-v",
                      action="store_true",
                      dest="verbose",
                      default=False,
                      help="make lots of noise [default]")

程式收到 "-h" 或 "--help",交 OptionParser 解,自印出明容,而忽略其它的 argument:
复制代码 代码如下:

usage: <yourscript> [options] arg1 arg2
 
    options:
      -h, --help           show this help message and exit
      -v, --verbose        make lots of noise [default]
      -q, --quiet          be vewwy quiet (I'm hunting wabbits)
      -fFILE, --file=FILE  write output to FILE
      -mMODE, --mode=MODE  interaction mode: one of 'novice', 'intermediate'
                           [default], 'expert'

得一始提到交 OptionParser 建子的 MSG_USAGE ? optparse 套件 usage 息也提供了一些支援。在 usage 中使用 "%prog" 字, OptionParser 自其代程式名,即 sys.args[0]:
复制代码 代码如下:

usage = "usage: %prog [options] arg1 arg2"

如果程式名 "myprog",出在 help 息中的 usage 就是:
复制代码 代码如下:

usage = "usage: myprog [options] arg1 arg2"

如果OptionParser 建子有收到任何,自生一 usage 息:
复制代码 代码如下:

"usage: %prog [options]"

前提是程式有 positional argument。甭心 option 在 help 息中排列的方式, OptionParser 搞定一切,如同前面程式所示。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表