新聞中心
getopt —- C 風(fēng)格的命令行選項解析器
源代碼: Lib/getopt.py

成都創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護(hù)、公眾號搭建、重慶小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!
備注
getopt 模塊是一個命令行選項解析器,其 API 設(shè)計會讓 C getopt() 函數(shù)的用戶感到熟悉。 不熟悉 C getopt() 函數(shù)或者希望寫更少代碼并獲得更完善幫助和錯誤消息的用戶應(yīng)當(dāng)考慮改用 argparse 模塊。
此模塊可協(xié)助腳本解析 sys.argv 中的命令行參數(shù)。 它支持與 Unix getopt() 函數(shù)相同的慣例(包括形式如 ‘-‘ 與 ‘--‘ 的參數(shù)的特殊含義)。 也能通過可選的第三個參數(shù)來使用與 GNU 軟件所支持形式相類似的長選項。
此模塊提供了兩個函數(shù)和一個異常:
getopt.getopt(args, shortopts, longopts=[])
解析命令行選項與形參列表。 args 為要解析的參數(shù)列表,不包含最開頭的對正在運行的程序的引用。 通常這意味著 sys.argv[1:]。 shortopts 為腳本所要識別的字母選項,包含要求后綴一個冒號 (':';即與 Unix getopt() 所用的格式相同) 的選項。
備注
與 GNU getopt() 不同,在非選項參數(shù)之后,所有后續(xù)參數(shù)都會被視為非選項。 這類似于非 GNU Unix 系統(tǒng)的運作方式。
如果指定了 longopts,則必須為一個由應(yīng)當(dāng)被支持的長選項名稱組成的列表。 開頭的 '--' 字符不應(yīng)被包括在選項名稱中。 要求參數(shù)的長選項后應(yīng)當(dāng)帶一個等號 ('=')。 可選參數(shù)不被支持。 如果想僅接受長選項,則 shortopts 應(yīng)為一個空字符串。 命令行中的長選項只要提供了恰好能匹配可接受選項之一的選項名稱前綴即可被識別。 舉例來說,如果 longopts 為 ['foo', 'frob'],則選項 --fo 將匹配為 --foo,但 --f 將不能得到唯一匹配,因此將引發(fā) GetoptError。
返回值由兩個元素組成:第一個是 (option, value) 對的列表;第二個是在去除該選項列表后余下的程序參數(shù)列表(這也就是 args 的尾部切片)。每個被返回的選項與值對的第一個元素是選項,短選項前綴一個連字符 (例如 '-x'),長選項則前綴兩個連字符 (例如 '--long-option'),第二個元素是選項參數(shù),如果選項不帶參數(shù)則為空字符串。 列表中選項的排列順序與它們被解析的順序相同,因此允許多次出現(xiàn)。 長選項與短選項可以混用。
getopt.gnu_getopt(args, shortopts, longopts=[])
此函數(shù)與 getopt() 類似,區(qū)別在于它默認(rèn)使用 GNU 風(fēng)格的掃描模式。 這意味著選項和非選項參數(shù)可能會混在一起。 getopt() 函數(shù)將在遇到非選項參數(shù)時立即停止處理選項。
如果選項字符串的第一個字符為 '+',或者如果設(shè)置了環(huán)境變量 POSIXLY_CORRECT,則選項處理會在遇到非選項參數(shù)時立即停止。
exception getopt.GetoptError
This is raised當(dāng)參數(shù)列表中出現(xiàn)不可識別的選項或者當(dāng)一個需要參數(shù)的選項未帶參數(shù)時將引發(fā)此異常。 此異常的參數(shù)是一個指明錯誤原因的字符串。 對于長選項,將一個參數(shù)傳給不需要參數(shù)的選項也將導(dǎo)致引發(fā)此異常。 msg 和 opt 屬性會給出錯誤消息和關(guān)聯(lián)的選項;如果沒有關(guān)聯(lián)到異常的特定選項,則 opt 將為空字符串。
exception getopt.error
GetoptError 的別名;用于向后兼容。
一個僅使用 Unix 風(fēng)格選項的例子:
>>> import getopt>>> args = '-a -b -cfoo -d bar a1 a2'.split()>>> args['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']>>> optlist, args = getopt.getopt(args, 'abc:d:')>>> optlist[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]>>> args['a1', 'a2']
使用長選項名也同樣容易:
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'>>> args = s.split()>>> args['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']>>> optlist, args = getopt.getopt(args, 'x', [... 'condition=', 'output-file=', 'testing'])>>> optlist[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]>>> args['a1', 'a2']
在腳本中,典型的用法類似這樣:
import getopt, sysdef main():try:opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])except getopt.GetoptError as err:# print help information and exit:print(err) # will print something like "option -a not recognized"usage()sys.exit(2)output = Noneverbose = Falsefor o, a in opts:if o == "-v":verbose = Trueelif o in ("-h", "--help"):usage()sys.exit()elif o in ("-o", "--output"):output = aelse:assert False, "unhandled option"# ...if __name__ == "__main__":main()
請注意通過 argparse 模塊可以使用更少的代碼并附帶更詳細(xì)的幫助與錯誤消息生成等價的命令行接口:
import argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('-o', '--output')parser.add_argument('-v', dest='verbose', action='store_true')args = parser.parse_args()# ... do something with args.output ...# ... do something with args.verbose ..
參見
模塊 argparse
替代的命令行選項和參數(shù)解析庫。
網(wǎng)站名稱:創(chuàng)新互聯(lián)Python教程:getopt—-C風(fēng)格的命令行選項解析器
文章路徑:http://www.dlmjj.cn/article/dhpieep.html


咨詢
建站咨詢
