python optparse模块使用实例
admin
2023-07-31 02:14:50
0

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

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...