1. 程式人生 > >python OptParse模塊的用法詳解

python OptParse模塊的用法詳解

輸出 light getopt 顯示 with show 函數名 .com posix

OptParse模塊的簡單介紹

Python 有兩個內建的模塊用於處理命令行參數:
  一個是 getopt只能簡單處理 命令行參數;
  另一個是 optparse,它功能強大,而且易於使用,可以方便地生成標準的、符合Unix/Posix 規範的命令行說明。會自動幫你負責-h幫助選項。

  要自己定制程序的參數選項控制,可以使用python自帶的OptParse模塊,當然也可以直接解析sys.argv裏的參數(但是此比較麻煩)

import optparse

optparse 現在不再更新了,更新版本叫 argparse.
import argparse

  

 OptParse支持一般性GUN的選項方法,包括:

無參選項, -v 
有參選項, -p value, –para=value 
值參一體, -pvalue (不支持長參數)
合並選項, -abc, -abcp value (最後一個可以是有參, 其余均無參)

  解析時候 - 和 -- 的區別:

- 就看後面的值, 要是無參的, 那繼續讀下一個; 要是有參的,就把參數讀進來(分隔或一體).

-- 直接讀後面的值;

  

optparse modlue基本用法

一,基本用法

1,載入OptionParser類,新建對象: OptionParser()

2,添加選項: add_option(…)

3,參數解析: parse_args()

舉個例子:

# _*_ coding: utf-8 _*_ 
import optparse

from optparse import OptionParser
# 一個幫助文檔解釋字符串
hstr = ‘%prog custom help string‘
parser = OptionParser(hstr, description=‘custom description‘, version=‘%prog 1.0‘)
#通過OptionParser類創建parser實例,初始參數usage中的%prog等同於os.path.basename(sys.argv[0]),即
#你當前所運行的腳本的名字,version參數用來顯示當前腳本的版本。
‘‘‘
添加參數,-f、--file是長短options,有一即可。
dest=‘user‘ 將該用戶輸入的參數保存到變量user中,可以通過options.user方式來獲取該值
action用來表示將option後面的值如何處理,比如:
XXX.py -f test.txt
經過parser.parse_args()處理後,則將test.txt這個值存儲進-f所代表的一個對象,即定義-f中的dest
即option.filename = ‘test.txt‘
action的常用選項還有store_true,store_false等,這兩個通常在布爾值的選項中使用。

 metavar僅在顯示幫助中有用,如在顯示幫助時會有:
 -f FILE, --filename=FILE    write output to FILE
 -m MODE, --mode=MODE  interaction mode: novice, intermediate, or expert
                         [default: intermediate]
如果-f這一項沒有metavr參數,則在上面會顯示為-f FILENAME --filename=FILENAME,即會顯示dest的值

 defalut是某一選項的默認值,當調用腳本時,參數沒有指定值時,即采用default的默認值。
 ‘‘‘
parser.add_option(‘-i‘, ‘--input‘, action=‘store‘, dest=‘input‘, help=‘read input data from input file‘)
parser.add_option(‘-o‘, ‘--output‘, action=‘store‘, dest=‘output‘, help=‘write data to output file‘)
parser.add_option(‘-q‘, ‘--quite‘, action=‘store_false‘, dest=‘version‘, help=‘don\‘t print the version‘)
# parser.add_option(‘-v‘, ‘--version‘, action=‘store_true‘, dest=‘version‘, default=False, help=‘print the version‘)
# parser.add_option(‘-v‘, ‘--version‘, action=‘store_true‘, dest=‘version‘, help=‘print the version‘)

parser.add_option(‘-f‘, ‘--file‘, action=‘store‘, dest=‘file‘, help=‘file to handle‘)
parser.add_option(‘-a‘, ‘--add‘, action=‘append‘, dest=‘add‘, help=‘add to handle‘)
parser.add_option(‘-c‘, ‘--count‘, action=‘count‘, dest=‘count‘, help=‘count to handle‘)
parser.add_option(‘-d‘, ‘--count1‘, action=‘count‘, dest=‘count‘, help=‘count1 to handle‘)

#parser.add_option(‘-v‘, ‘--version‘, dest=‘version‘)

if parser.has_option(‘-f‘):
    print(‘content -f‘) # parser.set_default(‘-f‘, ‘myFile‘)
    parser.remove_option(‘-f‘)
if not parser.has_option(‘-f‘):
    print(‘do not content -f‘)
# 用一個數組模擬命令參數
#testArgs = [‘-i‘, ‘someForInput‘, ‘-f‘, ‘someForFile‘, ‘-vq‘, ‘-a‘, ‘test1 test2 test3‘, ‘-c‘, ‘-d‘]
testArgs = [ ‘-i‘, ‘someForInput‘, ‘someForFile‘, ‘someForFile1‘, ‘-q‘, ‘-a‘, ‘test1 test2 test3‘, ‘-c‘, ‘-d‘, ‘-h‘]
options, args = parser.parse_args(testArgs)
print(‘options : %s‘ % options)
print(‘args : %s‘ % args)

if options.input:
    print(‘input in args : %s‘ % options.input)
if options.version:
    print(‘version 1.0.0‘)

# if options.file:
# print(‘file in args : %s‘ % options.file)
if options.add:
    print(‘add in args : %s‘ % options.add)

print(‘version in args‘, options.version)

  

結果:

content -f
do not content -f
Usage: optParse模塊的練習.py custom help string

custom description

Options:
  --version             show program‘s version number and exit
  -h, --help            show this help message and exit
  -i INPUT, --input=INPUT
                        read input data from input file
  -o OUTPUT, --output=OUTPUT
                        write data to output file
  -q, --quite           don‘t print the version
  -a ADD, --add=ADD     add to handle
  -c, --count           count to handle
  -d, --count1          count1 to handle

Process finished with exit code 0

二,新建對象

parse = OptionParse()

形參包括:

def __init__(self,
             usage=None,
             option_list=None,
             option_class=Option,
             version=None,
             conflict_handler="error",
             description=None,
             formatter=None,
             add_help_option=True,
             prog=None,
             epilog=None):

三,新建選項

3.1 可以使用下面幾個方法:

add_option, add_option_group, add_options.

3.2 具體參數分析:

add_option(…):

    add_option 方法中前面的參數為命令的選項, 可以為等價的短名或者長名,一般是前面為短名,後面為長名.

可以配置的參數有以下:
    dest: 可以決定解析後,取值時的屬性名, 尤其適於有多個等價參數. 不指定時就是選項不加-的字符串.
    type: 選項的值類型,值的默認類型是字符串, 這裏將值指定為其他類型.
    default: 缺省值. 沒有設置缺省值的為None.
    help: 選項中有 -h 時打印的 help 信息.
    metavar: 表示顯示到 help 中選項的默認值;
    choices: 當 type 設置為 choices 時,需要設置此值.
    const: 指定一個常量值給選項, 該常量值將用於後面store_const和append_const,一起合用.
    action: 用於控制對選項和參數的處理,像無參數選項處理,可以設置為以下幾種字符串: 
        "store": 儲存值到 dest 指定的屬性,強制要求後面提供參數;
        "store_true": 當使用該選項時,後面的 dest 將設置為 true, 不跟參數.
        "store_false": 當使用該選項時,後面的 dest 將設置為 false. 常配合另一個 "store_true" 的選項使用同一個 dest 時使用. 不跟參數.
        "append": 儲存值到 dest 指定的屬性,並且是以數組的形式, 必須跟參數.
        "store_const": 用來存儲參數為 const 設置的值到 dest 指定的屬性當中.常用於 dest 為同名2個以上選項時的處理. 不跟參數.
        "append_const": 用來存儲參數為 const 設置的數組到 dest 指定的屬性當中. 不跟參數.
        "count": 使用後將給儲存值到 dest 指定的屬性值加1,可以統計參數中出現次數.用途不大. 不跟參數.
        "callback": 後面指定回調函數名(不加括號),會將相應opt和args傳給回調函數.
        "help", "version": 對應為幫助和版本. 要另外自己設計時使用.

    當 action 設置為 store_ture / store_false 時, 解析參數時, 如果有值時為 Ture / False, 沒有值時為 None.
    當 dest 相同時, 一個 action 設置為 store_false, 另一個 action 設置為 store_ture 時, 解析參數時,以在後面出現的為準.

    

  

四,選項相關參數:

4.1,可以用來同時設置多個選項的默認參數

    def set_default(self, dest, value):

    def set_defaults(self, **kwargs):

  

4.2,檢查是否有相應的選項

  def has_option(self, opt_str):

  

4.3,刪除選項

     def remove_option(self, opt_str):

4.4,舉個例子:

parser = OptionParser() 
parser.add_option(‘-f‘, ‘--file‘, action=‘store‘, dest=‘file‘, help=‘file to handle‘) 
if parser.has_option(‘-f‘): 
    print(‘content -f‘) 
    parser.set_default(‘-f‘, ‘myFile‘) 
    parser.remove_option(‘-f‘)
if not parser.has_option(‘-f‘): 
    print(‘do not content -f‘)

輸出:

content -f
do not content -f

4.5,添加選項組 add_option_group()

  如果 options 很多的時候, 可以進行分組,然後進行添加. 分組的好處是, 對一系列程序參數可以分一個組,如果有獨立的 description , 可以另外處理.使用如下:

group = OptionGroup(parser)  #創建分組
group.add_option() #添加選項
parser.add_option_group(group) #將分組加入到解釋器

4.6,添加選項數組 add_options([Option1,…])

將各個Option對象放在一個列表裏再一起添加

五,參數解析parse_args()

使用 parse_args() 對參數進行解析,默認是使用 sys.argv[1:] 作為參數, 也可以傳遞一個命令行參數列表: parse_args(list).

parse_args() 返回的兩個值:

    options,它是一個對象,保存有命令行參數值。只要知道命令行參數名,如 input,就可以訪問其對應的值:options.input 。
    args ,它是沒被解析的命令行參數的列表。

六,幫助文檔

默認自動帶有 -h 和 --help 來輸出幫助文檔, 輸出後程序終止.
幫助文檔由三部分組成:

    usage 幫助部分,
usage 幫助部分一般在 OptionParser 初始化時輸入,為第一個參數, 也可以用具體形參名指定. 可以使用 %prog 來表示當前的程序名.

    description 描述部分
在初始化 OptionParser 時 description 形參指定的內容.

    選項以及選項說明部分
選項加入時定義的說明文字

  

OptionParser 的形參 version 可以指定 --version 輸出的字符串, 同樣支持%prog, 如 version="%prog 1.0"

舉個例子:
# 一個幫助文檔解釋字符串
hstr = ‘%prog custom help string‘
parser = OptionParser(hstr, description=‘custom description‘)

  

get_usage(), get_description(), get_version(): 獲得對應的字符串.
print_help(), print_usage(), print_description(), print_version(): 輸出相應內容
error(str): 出錯並輸出str.

  



此文參考:https://www.jianshu.com/p/bec089061742

python OptParse模塊的用法詳解