欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python參數(shù)解析模塊sys、getopt、argparse使用與對比分析

 更新時間:2019年04月02日 16:27:42   作者:Together_CZ  
今天小編就為大家分享一篇關(guān)于Python參數(shù)解析模塊sys、getopt、argparse使用與對比分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

一些命令行工具的使用能夠大大簡化代碼腳本的維護成本,提升復用性,今天主要是借助于python提供的幾種主流的參數(shù)解析工具來實現(xiàn)簡單的功能,主要是學習實踐為主,這是新年伊始開工的第一篇,還是花了一番功夫來完成寫作的和實驗的,希望能夠幫到需要的朋友們,新的一年里,祝大家心想事成!

好了,廢話不多說,下面進入正文。

Python中有三個內(nèi)建的模塊用于處理命令行參數(shù):

第一個:sys,最簡單,只能夠提供簡單的參數(shù)解析功能

第二個:getopt,只能簡單的處理命令行參數(shù) ,較sys封裝更好一點

第三個:argparse,使其更加容易的編寫用戶友好的命令行接口。它所需的程序進程了參數(shù)定義,argparse將更好的解析    sys.argv。同時argparse模塊還能自動生成幫助及用戶輸入錯誤參數(shù)時的提示信息。

在命令行參數(shù)中分為“-”和“--”兩種模式,具體的使用方法以及與異同點我都會在下面的實際使用中介紹到,主要是正確完成對兩種命令參數(shù)模式的區(qū)分就行了。接下來的實踐中,首先以sys模塊為例,來觀察該模塊的參數(shù)解析過程,具體實踐如下:

def sysFunc():
  '''
  基于 sys 模塊的簡單參數(shù)解析功能
  選項的寫法要求:
  對于短格式:
        "-"號后面要緊跟一個選項字母,如果還有此選項的附加參數(shù),可以用空格分開,也可以不分開。
        長度任意,可以用引號。
        如: -h  -ls -l s  等等
  對于長格式:
       "--"號后面要跟一個單詞,如果還有些選項的附加參數(shù),后面要緊跟"=",再加上參數(shù)。
       "="號前后不能有空格。
       如: --input=data.txt
  長格式是在Linux下引入的,許多Linux程序都支持這兩種格式。在Python中提供了getopt模塊很好
  的實現(xiàn)了對著兩種用法的支持,而且使用簡單。
  執(zhí)行示例:
       python demo.py -d data.txt
       python demo.py --data=data.txt
  '''
  if len(sys.argv)==1: 
    print 'Nothing need to be done!' 
    sys.exit()
  else:
    para_list=sys.argv
    print 'Parameters is: ',para_list
    if para_list[1].startswith('--'):
      print 'DataFile name is: ',para_list[1].split('=')[-1].strip()
      print 'Longopts,do your actions here!!!'
    elif para_list[1].startswith('-'):
      print 'DataFile name is: ',para_list[2]
      print 'Shortopts,do your actions here!!!'

關(guān)于該模塊的使用和注意事項我在上面的代碼片段中已經(jīng)解釋清楚了,相信很容易理解,我也附上了執(zhí)行示例,接下來我們執(zhí)行一下上述代碼結(jié)果如下:

接下來我們使用getopt模塊來進行參數(shù)命令行的解析操作,代碼中我們選用IP和端口兩個屬性作為待傳入的參數(shù),具體實踐如下:

def getoptFunc():
  '''
  基于 getopt 模塊來實現(xiàn)參數(shù)解析功能
  函數(shù)getopt(args,shortopts,longopts=[])
    參數(shù)args一般是sys.argv[1:]
    shortopts 短格式 (-) 
    longopts 長格式(--) 
  注意點:
      定義命令行參數(shù)時,要先定義帶'-'選項的參數(shù),再定義沒有‘-'的參數(shù)
  執(zhí)行示例:
      python demo.py -i 172.19.7.217 -p 8066 data.txt 88
      python demo.py --ip=172.19.7.217 --port=8066 data.txt 88
  '''
  if len(sys.argv)==1:
    print 'Nothing need to be done!'
    sys.exit()
  try:
    opts,args=getopt.getopt(sys.argv[1:],"hp:i:",["help","ip=","port="]) #過濾掉腳本名稱
    '''
    opts是個包含元祖的列表,args是個列表,包含那些沒有‘-'或‘--'的參數(shù)
    短格式 --- h 后面沒有冒號:表示后面不帶參數(shù),p:和 i:后面有冒號表示后面需要參數(shù)
    長格式 --- help后面沒有等號=,表示后面不帶參數(shù),其他三個有=,表示后面需要參數(shù)
    '''
    print 'opts: ',opts
    print 'args: ',args
  except getopt.GetoptError:
    print "argv error,please input"
    sys.exit()
  #打印具體參數(shù)
  map_dict={'-i':'IP','--ip':'IP','-p':'Port','--port':'Port'}
  for name,value in opts:
    if name in ("-h","--help"):
      print  """
          Usage:sys.args[0] [option]
          -h or --help:顯示幫助信息
          -p or --ip: IP地址
          -p or --port: IP端口
          """
    if name in ('-i','--ip','-p','--port'):
      print '{0} is=======>{1}'.format(map_dict[name],value)

使用getopt模塊分析命令行參數(shù)大體上分為三個步驟:

  • 1.導入getopt, sys模塊
  • 2.分析命令行參數(shù)
  • 3.處理結(jié)果       

同樣我們加入了詳細的注釋與說明幫助理解該模塊的工作機制,我們也附上了相關(guān)的執(zhí)行示例,運行上述代碼得到的結(jié)果如下圖所示:

最后我們實踐一下argparse模塊,該模塊相對于前兩個模塊而言,封裝程度更為高級,使用也更為方便一下,具體的實踐如下:

def argparseFunc():
  '''
  基于argparse模塊實現(xiàn)高級的參數(shù)解析功能
  執(zhí)行示例:
       python demo.py -i 172.19.7.236 -p 7077 -f -w
       python demo.py -i 172.19.7.236 -p 7077 -f -r
  '''
  parser=argparse.ArgumentParser(description="show example") #使用argparse的構(gòu)造函數(shù)來創(chuàng)建對象
  parser.add_argument("-i","--ip",help="IP Address") #添加可解析的參數(shù)
  parser.add_argument("-p","--port",help="IP Port") #添加可解析的參數(shù)
  parser.add_argument("-f","--flag",help="Flag",action="store_true") #action=store_true的意義是如果使用了這個參數(shù)則值默認為TRUE
  exptypegroup=parser.add_mutually_exclusive_group() #添加一組互斥的選項,如上例中的-l和-r只能用一個
  exptypegroup.add_argument("-r","--read",help="Read Action",action="store_true")
  exptypegroup.add_argument("-w","--write",help="Write Action",action="store_true")
  ARGS=parser.parse_args()
  print 'ARGS:',ARGS
  if ARGS.ip:
    print "IP is: "+ARGS.ip
  if ARGS.port:
    print "Port is: "+ARGS.port
  if ARGS.flag:
    print "Flag is: "+str(ARGS.flag)
  if ARGS.read:
    print "Read action is: "+str(ARGS.read)
  if ARGS.write:
    print "Write action is: "+str(ARGS.write)

該模塊的使用較為廣泛,首先使用該模塊提供的構(gòu)造函數(shù)來創(chuàng)建一個ArgumentParser對象,后續(xù)的參數(shù)傳入和指定等工作都是基于ArgumentParser對象來進行的,其中,add_argument用來添加參數(shù)對象選項,add_mutually_exclusive_group用于添加互斥的選項,比如:上述的讀操作和寫操作就是互斥的,上述代碼中我們給出了執(zhí)行示例,同樣我們依舊是基于IP和端口兩個參數(shù)選項進行實驗,結(jié)果如下所示:

我們想知道,聲明好的互斥的參數(shù)選項是否真的是不能同時使用呢?這里簡單的執(zhí)行一下就行了:

從上面的error信息中我們看到了argparse模塊給我們的反饋信息是讀寫操作不被允許同時使用,說明了上述我們聲明的互斥參數(shù)是正常工作了的。

三個模塊,三種參數(shù)解析的實踐也只能是對其達到初步了解的目的,希望有了一定的了解與認識之后再使用到具體的項目中去相信效果會更好一些。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Python3 JSON編碼解碼方法詳解

    Python3 JSON編碼解碼方法詳解

    這篇文章主要介紹了Python3 JSON編碼解碼方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 對Python3+gdal 讀取tiff格式數(shù)據(jù)的實例講解

    對Python3+gdal 讀取tiff格式數(shù)據(jù)的實例講解

    今天小編就為大家分享一篇對Python3+gdal 讀取tiff格式數(shù)據(jù)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 分享vim python縮進等一些配置

    分享vim python縮進等一些配置

    本篇文章給大家分享了vim python縮進等一些配置的相關(guān)知識點,有需要的朋友可以參考下。
    2018-07-07
  • python中start和run方法的區(qū)別

    python中start和run方法的區(qū)別

    大家好,本篇文章主要講的是python中start和run方法的區(qū)別,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Python讀取Excel一列并計算所有對象出現(xiàn)次數(shù)的方法

    Python讀取Excel一列并計算所有對象出現(xiàn)次數(shù)的方法

    這篇文章主要給大家介紹了關(guān)于Python讀取Excel一列并計算所有對象出現(xiàn)次數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • python的類變量和成員變量用法實例教程

    python的類變量和成員變量用法實例教程

    這篇文章主要介紹了python的類變量和成員變量用法,是學習Python程序設(shè)計所必須牢固掌握的,需要的朋友可以參考下
    2014-08-08
  • Python property函數(shù)的具體使用

    Python property函數(shù)的具體使用

    property()函數(shù)是Python中用于創(chuàng)建可管理屬性的重要工具,它可以實現(xiàn)數(shù)據(jù)封裝、訪問控制、屬性計算等功能,本文就來介紹一下如何使用,感興趣的可以了解一下
    2024-02-02
  • Python shutil模塊用法實例分析

    Python shutil模塊用法實例分析

    這篇文章主要介紹了Python shutil模塊用法,結(jié)合實例形式分析了Python使用shutil模塊操作文件拷貝的相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2019-10-10
  • python中對信號的處理詳解

    python中對信號的處理詳解

    這篇文章主要給大家介紹了關(guān)于python中對信號處理的相關(guān)資料, 計算機借助信號來接收和發(fā)送各種命令,操作系統(tǒng)針對其編程要接收或生成的每種命令列出了至少一個信號,需要的朋友可以參考下
    2021-07-07
  • 在?Python?中如何將天數(shù)添加到日期

    在?Python?中如何將天數(shù)添加到日期

    這篇文章主要介紹了在?Python?中將天數(shù)添加到日期,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論