python的内置子產品中對于指令行的解析子產品共兩個getopt 和 optparse 。不過getopt過于簡單,往往不能滿足需求。此時可以使用optparse子產品。這個子產品相對于getopt更新,功能更強大。
那麼如何使用optparse子產品呢? optparse 子產品的官方文檔給出了很詳細的說明。
第一步、導入子產品,并在主函數中建立執行個體
from optparse import OptionParser
[...]
parser = OptionParser()
複制
第二步、使用add_option定義需要的option
parser.add_option(opt_str, ...,
attr=value, ...)
複制
add_option 方法中有很多可選的參數,及一些影響optparse函數行為的屬性。這些東西都很值得去細細推敲。
最後一步、當定義完所有option 後,通過parse_args 去解析所有的option。并傳回解析結果
(options, args) = parser.parse_args()
複制
parse_args 預設解析的是sys.argv[1:] 的所有參數。不過若你喜歡,也可以自己傳遞參數到parse_args。例如如下的形式:
args = ["-f", "foo.txt"]
(options, args) = parser.parse_args(args)
複制
parse_args 有兩個傳回值,options 和 args 。其中options是一個對象,通過這個對象可以擷取到所有定義的option相應資訊。而args是一個list,裡面存儲了所有沒有被定義的參數資訊。
以上三個步驟,就是使用optparse子產品的完整展現。不過在第二步中add_option中存在很多影響pars_args行為的屬性,将在下面逐漸記錄解釋。
action 屬性:
它将告訴optparse 遇到相應的指令行時應該怎麼去做。預設若不指定action屬性,它将被賦予預設值store。那麼store是什麼意義呢?以官方的執行個體說明
當添加如下的option:
parser.add_option("-f", "--file",
action="store", type="string", dest="filename")
複制
且傳遞如下的參數:
args = ["-f", "foo.txt"]
(options, args) = parser.parse_args(args)
複制
當optparse 發現參數-f 時,它會将-f後面的一個參數也消費掉(将-f 和 foo.txt綁定到一起了)。并将foo.txt存儲到options.filename中。當經過parse_args解析後,調用options.filename時将得到foo.txt這個值。
以上是action的預設值store。另外還有布爾類型的action。這樣類型的東西主要是在指令行參數不需要值的時候使用。例如 -v 檢視版本号, -v 後面就需要再寫參數了。
Example:
parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="quit")
複制
以上兩個例子,當經過parse_args後調用options.verbose将為true。而調用options.quit将為false
當然,action還有其他一些值。如:store_const、append、count 和 callback 。研究後再呈上文章吧。
default屬性:
給相應的參數設定預設值,也是一個很有必要知道的屬性
Example:
parser.add_option("-v", action="store_true", dest="verbose", default=False)
parser.add_option("-q", action="store_false", dest="verbose", default=True)
複制
另外一種比較清晰的方法設定預設值:
parser.set_defaults(verbose=True)
parser.add_option(...)
(options, args) = parser.parse_args()
複制
等等吧。具體了解,還需參考相應的官方手冊:https://docs.python.org/2/library/optparse.html