国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python命令行解析模塊詳解

2020-02-22 23:05:13
字體:
供稿:網(wǎng)友

本文研究的主要是Python命令行解析模塊的相關(guān)內(nèi)容,具體如下。

Python命令行常見的解析器有兩種,一是getopt模塊,二是argparse模塊。下面就解讀下這兩種解析器。

getopt模塊

這個(gè)模塊可以幫助腳本解析命令行參數(shù),一般是sys.argv[1:]。它遵循著Unix的getopt()函數(shù)相同的約定(用-/--指定命令參數(shù))。這個(gè)模塊提供兩個(gè)函數(shù)(getopt.getopt()/getopt.gnu_getopt())和一個(gè)參數(shù)異常(getopt.GetoptError)。

這里重點(diǎn)介紹getopt.getopt()這個(gè)函數(shù)。

函數(shù)原型:getopt.getopt(args, options[, long_options])

這個(gè)函數(shù)有三個(gè)參數(shù):

args:腳本要解析的命令行參數(shù); options:命令行短選項(xiàng),如果指定的短選項(xiàng)后面需要跟參數(shù)的話,要在相應(yīng)短選項(xiàng)后面加“:”,如e:; long_options:命令行長(zhǎng)選項(xiàng),這個(gè)參數(shù)是可選的。如果指定的長(zhǎng)選項(xiàng)后面要跟參數(shù)的話,要在相應(yīng)長(zhǎng)選項(xiàng)后面加上“=”,如conding=;

當(dāng)給定的命令行參數(shù)解析不了的話,就會(huì)拋出GetoptError異常。

函數(shù)的返回值包含兩個(gè)元素:

第一個(gè)元素是一個(gè)(option,value)元組對(duì)。Option是解析的參數(shù),value是對(duì)應(yīng)參數(shù)的值; 第二個(gè)元素是腳本不需要執(zhí)行的參數(shù)列表。也就是這些參數(shù)是多余的;

下面看幾個(gè)Demo:

短選項(xiàng):

>>> importgetopt>>> 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']

長(zhǎng)選項(xiàng):

>>> 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']

在腳本當(dāng)中經(jīng)典的應(yīng)用實(shí)例:

importgetopt,sys defmain():  try:    opts, args = getopt.getopt(sys.argv[1:],"ho:v", ["help","output="])  except getopt.GetoptErroras err:    # print help information and exit:    printstr(err) # will print something like "option -a not recognized"    usage()    sys.exit(2)  output =None  verbose =False  for o, a in opts:    if o =="-v":      verbose =True    elif o in ("-h","--help"):      usage()      sys.exit()    elif o in ("-o","--output"):      output = a    else:      assertFalse,"unhandled option"  # ... if __name__ =="__main__":  main()

argparse模塊

argparse模塊使得編寫用戶友好的命令行接口非常容易。程序只需定義好它要求的參數(shù),然后argparse將負(fù)責(zé)如何從sys.argv中解析出這些參數(shù)。argparse模塊還會(huì)自動(dòng)生成幫助和使用信息并且當(dāng)用戶賦給程序非法的參數(shù)時(shí)產(chǎn)生錯(cuò)誤信息。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九寨沟县| 葵青区| 准格尔旗| 图木舒克市| 元氏县| 双城市| 三江| 甘孜县| 靖安县| 邻水| 雷山县| 德清县| 雷波县| 南雄市| 江川县| 县级市| 镇安县| 白朗县| 苍溪县| 胶南市| 南皮县| 兴海县| 元阳县| 葫芦岛市| 托克逊县| 望城县| 洛浦县| 方城县| 乌拉特前旗| 霍林郭勒市| 东方市| 奉贤区| 济阳县| 岳阳市| 临武县| 辽中县| 苗栗市| 内乡县| 贵定县| 阿克| 平潭县|