Python命令行解析

sys.argv

手動解析
import sys
for i in range(len(sys.argv)):
	print 'NO.%d: %s'%(i,sys.argv[i])

getopt

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)

python 分割參數getopthtml

argparse

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

  • RawDescriptionHelpFormatter,
  • RawTextHelpFormatter
  • ArgumentDefaultsHelpFormatter 其它還有不少參數,此處就不一一列舉了。
增長參數
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

每一個參數解釋以下:spa

  • name or flags - 參數的名字.
  • action - 遇到參數時的動做,默認值是store。store_const,表示賦值爲const;append,將遇到的值存儲成列表,也就是若是參數重複則會保存多個值; append_const,將參數規範中定義的一個值保存到一個列表;count,存儲遇到的次數;此外,也能夠繼承argparse.Action自定義參數解析;
  • nargs - 參數的個數,能夠是具體的數字,或者是?號,當不指定值時對於Positional argument使用default,對於Optional argument使用const;或者是*號,表示0或多個參數;或者是+號表示1或多個參數.
  • const - action和nargs所須要的常量值.
  • default - 不指定參數時的默認值.
  • type - 參數的類型.
  • choices - 參數容許的值.
  • required - 可選參數是否能夠省略(僅針對optionals).
  • help - 參數的幫助信息,當指定爲argparse.SUPPRESS時表示不顯示該參數的幫助信息.
  • metavar - 在usage說明中的參數名稱,對於必選參數默認就是參數名稱,對於可選參數默認是全大寫的參數名稱.
  • dest - 解析後的參數名稱,默認狀況下,對於可選參數選取最長的名稱,中劃線轉換爲下劃線.

一些示例:.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

Sub-commands

將多個命令組合進一個程序中,使用子解析器來處理命令行的每一個部分,就想SVN以及OpenStack各個組件那樣: argparse 子命令解析1 argparse 子命令解析2

相關文章
相關標籤/搜索