python optparse模块使用实例

作者:junjie 时间:2021-02-03 22:01:36 

使用命令行时,如果要添加选项的话,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 會搞定一切,如同前面程式所示。

标签:python,optparse
0
投稿

猜你喜欢

  • ThinkPHP学习笔记(一)ThinkPHP部署

    2023-09-09 12:42:16
  • sqlserver合并DataTable并排除重复数据的通用方法分享

    2012-01-05 18:59:56
  • 简述Asp与XML之间的关系

    2008-04-17 10:46:00
  • Python实现手写一个类似django的web框架示例

    2022-06-18 03:17:26
  • Python3之外部文件调用Django程序操作model等文件实现方式

    2023-07-19 01:17:29
  • MSSQL2005数据附加失败报错3456解决办法

    2012-11-30 19:56:59
  • 网页设计中的对比原则与接近性原则

    2010-03-30 14:51:00
  • js取得当前鼠标的X,Y坐标

    2007-09-27 19:52:00
  • 实战手记:让百万级数据瞬间导入SQL Server

    2010-06-07 14:13:00
  • Python中最常用的操作列表的几种方法归纳

    2021-01-11 22:06:05
  • 减少新开窗口提升可访问性

    2009-04-17 13:56:00
  • Sql server 2005 找出子表树

    2008-11-24 15:23:00
  • 网站如何使用黄金分割布局

    2010-11-05 18:34:00
  • CSS网页设计时关于字体大小的设计

    2008-10-23 13:42:00
  • Python文字截图识别OCR工具实例解析

    2021-07-02 12:58:20
  • python基础教程之Hello World!

    2021-03-05 22:45:06
  • gulp-htmlmin压缩html的gulp插件实例代码

    2023-08-06 01:20:18
  • Python私有属性私有方法应用实例解析

    2022-11-08 05:09:03
  • Oracle数据库的十种重新启动步骤

    2012-07-21 14:58:25
  • 写出完美CSS代码的5个重要方面

    2009-12-30 16:44:00
  • asp之家 网络编程 m.aspxhome.com