手動解析
import sys for i in range(len(sys.argv)): print 'NO.%d: %s'%(i,sys.argv[i])
getopt模塊原來是命令行選項的解析器,支持UNIX函數getopt()創建的約定。它會解析一個參數序列,如sys.argv,並返回一個元祖序列和一個非選項參數序列。目前支持的選項語法包括短格式和長格式選項:- ,--。
try: options, remainder = getopt.getopt(sys.argv[1:], 'o:v', ['output=', 'verbose', 'version=',]) except getopt.GetoptError as err: print 'ERROR:', err sys.exit(1)
optparse was deprecated since version 2.7 and will not be developed further; development will continue with the argparse module.python
argparse是python標準庫中的模塊,之前的optparse已經廢棄。利用** argparse **,能夠完成對命令行的參數定義、解析以及後續的處理。app
import argparse parser = argparse.ArgumentParser(description="some information here") args = parser.parse_args()
ArgumentParser函數有不少可選參數,prog、usage、description、epilog分別定義解析器的_名稱、使用說明、描述、最後的結尾描述_。使用parents表示共享同一個父類解析器(這樣就能夠共享父類解析器的參數),而這個父類解析器一般是以下定義:函數
parent_parser = argparse.ArgumentParser(add_help=False)
此外,formatter_class定義description的顯示格式,取值能夠是以下三種,具體示例參見此處:ui
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
每一個參數解釋以下:spa
一些示例:.net
# 參數名稱爲echo parser.add_argument("echo", help="echo the string you use here") # 能夠增長類型 parser.add_argument("square", help="display a square of a given number", type=int) # 可選參數前面多了--符號,-v是簡寫形式,store_true說明碰到該參數時保存爲true,不然就是false parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") # 固然,也能夠這樣寫,規定了可選參數的類型和取值範圍 parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity") # count表示遇到該參數幾回,值就加幾,默認值是0 parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
增長互斥類型的參數:命令行
group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true") group.add_argument("-q", "--quiet", action="store_true")
若是必選參數的值以 - 開頭,須要在輸入命令時特殊處理:code
->>> parser = argparse.ArgumentParser(prog='PROG') ->>> parser.add_argument('foo', nargs='?') ->>> parser.parse_args(['--', '-f']) Namespace(foo='-f')orm
將多個命令組合進一個程序中,使用子解析器來處理命令行的每一個部分,就想SVN以及OpenStack各個組件那樣: argparse 子命令解析1 argparse 子命令解析2