[Python] OptionParser [basic] (Python v2.7 已被移除)
Python v2.7 已經移除此功能, 請改用 argparse
另外一個寫程式很常使用的就是手動輸入參數了, python有個很好用的叫做 OptionParser
官方說明 OptionParser: http://docs.python.org/2/library/optparse.html
宣告很容易, 只要記得import OptionParser就好
再來就是設定, 例如我需要輸入參數"-f", 其type為string, dest為"fp", help為"specitfy file path"
要增加選擇條件要用add_option, 第一個位置是設定要讓人輸入的flag; type = "string" 就是指定你要輸入的內容為string
dest = "fp" 就是讓人輸入內容之後, 要存到fp這個變數
default = "/home/hh/tmp" 顧名思義, 就是預設參數, 這個有沒有都可以, 只是如果沒有輸入-f, 那就會用這個預設值取代fp
help = "specify file path" 就是當使用者輸入python yourprogram.py -h的時候, 會顯示的參數詳細資訊
那只輸入這樣是還沒成功的, 還要輸入下面這行
這樣你就能夠來測試一下了, 假設檔名為conf.py
你會看到剛剛設定的參數也顯示在help指令, 也可以直接呼叫optParser.print_help()來產生此訊息
接下來如果你輸入 -f 但是不給參數會發生
就會有錯誤訊息顯示 -f 後面要給定 argument (所以如果要用預設值, 連 -f)
好那要如何操控擷取到的argument? 其實都已經設定到 option 裡面了, 所以例如說剛剛有設定 dest = "fp", 那只要存取 option.fp 即可
那進入詳細一點的解釋
1. 首先是type, 其實python支援滿多種類的, 有 "string", "int", "long", "choice", "float" and "complex"
Type ref: http://docs.python.org/2/library/optparse.html#optparse-standard-option-types
2. 再來, 其實add_option都有預設一個參數: action, 預設是store, 也就是說, 上面的範例, 實際上應該是
他的意思就是, 將輸入的argument儲存起來, 那其實action還有很多不同用途, 下表有部份常用
"store": 也就是預設將argument儲存起來
"store_true": 存true (boolean模式)
"store_false": 存false (boolean模式)
"append": 將argument存成一個list
"count": 作用類似counter, 每出現一次這個flag就會將dest的值加1
"callback": 呼叫callback function
store_true跟store_false是很常使用的方法, 例如做開關之類的動作, 相當方便(verbose之類)
3. 除此之外, 有預設的還有一個顯示usage: usage = "usage: %prog [options] arg1 arg2"
%prog其實就是你現在的檔案名稱, 同等於: os.path.basename(sys.argv[0])
不特別設定的話就會是現行的檔案名稱
4. 其實除了短版flag, 也有長版flag, 作法很簡單, 只要改成下列
這樣不管是輸入-f or --file, 都可以使用
ex:
其實還有更複雜的group option, 改天再補上
另外一個寫程式很常使用的就是手動輸入參數了, python有個很好用的叫做 OptionParser
官方說明 OptionParser: http://docs.python.org/2/library/optparse.html
宣告很容易, 只要記得import OptionParser就好
from optparser import OptionParser optParser = OptionParser()
再來就是設定, 例如我需要輸入參數"-f", 其type為string, dest為"fp", help為"specitfy file path"
optParser.add_option("-f", type = "string", dest = "fp", default = "/home/hh/tmp", help = "specitfy file path [default: /home/hh/tmp]")
要增加選擇條件要用add_option, 第一個位置是設定要讓人輸入的flag; type = "string" 就是指定你要輸入的內容為string
dest = "fp" 就是讓人輸入內容之後, 要存到fp這個變數
default = "/home/hh/tmp" 顧名思義, 就是預設參數, 這個有沒有都可以, 只是如果沒有輸入-f, 那就會用這個預設值取代fp
help = "specify file path" 就是當使用者輸入python yourprogram.py -h的時候, 會顯示的參數詳細資訊
那只輸入這樣是還沒成功的, 還要輸入下面這行
option, args = optParser.parse_args()
這樣你就能夠來測試一下了, 假設檔名為conf.py
[hh@vm ~]# python conf.py -h Usage: conf.py [options] Options: -h, --help show this help message and exit -f FP specitfy file path
你會看到剛剛設定的參數也顯示在help指令, 也可以直接呼叫optParser.print_help()來產生此訊息
接下來如果你輸入 -f 但是不給參數會發生
[hh@vm ~]# python conf.py -f Usage: conf.py [options] conf.py: error: -f option requires an argument
就會有錯誤訊息顯示 -f 後面要給定 argument (所以如果要用預設值, 連 -f)
好那要如何操控擷取到的argument? 其實都已經設定到 option 裡面了, 所以例如說剛剛有設定 dest = "fp", 那只要存取 option.fp 即可
那進入詳細一點的解釋
1. 首先是type, 其實python支援滿多種類的, 有 "string", "int", "long", "choice", "float" and "complex"
Type ref: http://docs.python.org/2/library/optparse.html#optparse-standard-option-types
2. 再來, 其實add_option都有預設一個參數: action, 預設是store, 也就是說, 上面的範例, 實際上應該是
optParser.add_option("-f", type = "string", action = "store", dest = "fp", default = "/home/hh/tmp", help = "specitfy file path [default: /home/hh/tmp]")
他的意思就是, 將輸入的argument儲存起來, 那其實action還有很多不同用途, 下表有部份常用
"store": 也就是預設將argument儲存起來
"store_true": 存true (boolean模式)
"store_false": 存false (boolean模式)
"append": 將argument存成一個list
"count": 作用類似counter, 每出現一次這個flag就會將dest的值加1
"callback": 呼叫callback function
store_true跟store_false是很常使用的方法, 例如做開關之類的動作, 相當方便(verbose之類)
3. 除此之外, 有預設的還有一個顯示usage: usage = "usage: %prog [options] arg1 arg2"
%prog其實就是你現在的檔案名稱, 同等於: os.path.basename(sys.argv[0])
不特別設定的話就會是現行的檔案名稱
4. 其實除了短版flag, 也有長版flag, 作法很簡單, 只要改成下列
optParser.add_option("-f", "--file", type = "string", action = "store", dest = "fp", default = "/home/hh/tmp", help = "specitfy file path [default: /home/hh/tmp]")
這樣不管是輸入-f or --file, 都可以使用
ex:
python conf.py --file=/home/hh/tmp2
其實還有更複雜的group option, 改天再補上
留言
張貼留言