最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python命令行解析模塊詳解

 更新時間:2018年02月01日 09:24:46   作者:itlance_ouyang  
這篇文章主要介紹了Python命令行解析模塊詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

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

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

getopt模塊

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

這里重點介紹getopt.getopt()這個函數(shù)。

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

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

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

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

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

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

下面看幾個Demo:

短選項:

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

長選項:

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

在腳本當中經(jīng)典的應用實例:

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將負責如何從sys.argv中解析出這些參數(shù)。argparse模塊還會自動生成幫助和使用信息并且當用戶賦給程序非法的參數(shù)時產(chǎn)生錯誤信息。
使用argparse模塊一般需要三個步驟:

1. 創(chuàng)建一個解析器

使用argparse的第一步是創(chuàng)建一個ArgumentParser對象:

>>> parser= argparse.ArgumentParser()

ArgumentParser對象會保存把命令行解析成Python數(shù)據(jù)類型所需要的所有信息。

2. 添加參數(shù)

通過調(diào)用add_argument()方法向ArgumentParser添加程序的參數(shù)信息。通常情況下,這些信息告訴ArgumentParser如何接收命令行上的字符串并將它們轉(zhuǎn)換成對象。這些信息被保存下來并在調(diào)用parse_args()時用到。例如:

>>> parser.add_argument('--name', help='username')
>>> parser.add_argument('--pass', help='password ')

接下來,調(diào)用parse_args()返回的對象將帶有兩個屬性,name和pass。分別保存著用戶名與密碼。

3. 解析參數(shù)

ArgumentParser通過parse_args()方法解析參數(shù)。它將檢查命令行,把每個參數(shù)轉(zhuǎn)換成恰當?shù)念愋筒⒉扇∏‘數(shù)膭幼?。在大部分情況下,這意味著將從命令行中解析出來的屬性建立一個簡單的 Namespace對象。

>>> argments = parser.parse_args(['--name','li','--pass','si'])

在腳本中,parse_args() 調(diào)用一般不帶參數(shù),ArgumentParser 將根據(jù)sys.argv自動確定命令行參數(shù)。

ArgumentParser 對象

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter,prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)

創(chuàng)建一個新的argmentParserr對象。所有的參數(shù)應該以關(guān)鍵字參數(shù)傳遞。下面有對每個參數(shù)各自詳細的描述,但是簡短地講它們是:

  • prog - 程序的名字(默認:sys.argv[0])
  • useage - 描述程序用法的字符串(默認:從解析器的參數(shù)生成)
  • description - 參數(shù)幫助信息之前的文本(默認:空)
  • epilog- 參數(shù)幫助信息之后的文本(默認:空)
  • parents - ArgmentParser 對象的一個列表,這些對象的參數(shù)應該包括進去
  • ormatter_class - 定制化幫助信息的類
  • prefix_chars - 可選參數(shù)的前綴字符集(默認:‘-‘)
  • fromfile_prefix_chars - 額外的參數(shù)應該讀取的文件的前綴字符集(默認:None)
  • argument_default - 參數(shù)的全局默認值(默認:None)
  • conflict_handler - 解決沖突的可選參數(shù)的策略(通常沒有必要)
  • add_help - 給解析器添加-h/–help 選項(默認:True)

add_argument() 方法

ArgumentParser.add_argument(nameor flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])

定義應該如何解析一個命令行參數(shù)。下面每個參數(shù)有它們自己詳細的描述,簡單地講它們是:

  • name or flags- 選項字符串的名字或者列表,例如foo 或者-f, --foo。
  • action - 在命令行遇到該參數(shù)時采取的基本動作類型。
  • nargs - 應該讀取的命令行參數(shù)數(shù)目。
  • const- 某些action和nargs選項要求的常數(shù)值。
  • default - 如果命令行中沒有出現(xiàn)該參數(shù)時的默認值。
  • type- 命令行參數(shù)應該被轉(zhuǎn)換成的類型。
  • choices - 參數(shù)可允許的值的一個容器。
  • required - 該命令行選項是否可以省略(只針對可選參數(shù))。
  • help - 參數(shù)的簡短描述。
  • metavar - 參數(shù)在幫助信息中的名字。
  • dest - 給parse_args()返回的對象要添加的屬性名稱。

總結(jié)

以上就是本文關(guān)于Python命令行解析模塊詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 基于python實現(xiàn)FTP文件上傳與下載操作(ftp&sftp協(xié)議)

    基于python實現(xiàn)FTP文件上傳與下載操作(ftp&sftp協(xié)議)

    這篇文章主要介紹了基于python實現(xiàn)FTP文件上傳與下載操作(ftp&sftp協(xié)議),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python 詳解如何寫flask文件下載接口

    python 詳解如何寫flask文件下載接口

    Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權(quán)。Flask也被稱為 "microframework" ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的數(shù)據(jù)庫、窗體驗證工具
    2021-10-10
  • pygame庫實現(xiàn)移動底座彈球小游戲

    pygame庫實現(xiàn)移動底座彈球小游戲

    這篇文章主要為大家詳細介紹了pygame庫實現(xiàn)移動底座彈球小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Python?sklearn預測評估指標混淆矩陣計算示例詳解

    Python?sklearn預測評估指標混淆矩陣計算示例詳解

    這篇文章主要為大家介紹了Python?sklearn預測評估指標混淆矩陣計算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Python求導數(shù)的方法

    Python求導數(shù)的方法

    這篇文章主要介紹了Python求導數(shù)的方法,涉及Python數(shù)學運算的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python中np.linalg.norm()用法實例總結(jié)

    Python中np.linalg.norm()用法實例總結(jié)

    在線性代數(shù)中一個向量通過矩陣轉(zhuǎn)換成另一個向量時,原有向量的大小就是向量的范數(shù),這個變化過程的大小就是矩陣的范數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中np.linalg.norm()用法的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Python Coroutine池化的實現(xiàn)詳解

    Python Coroutine池化的實現(xiàn)詳解

    在當今計算機科學和軟件工程的領(lǐng)域中,池化技術(shù)如線程池、連接池和對象池等已經(jīng)成為優(yōu)化資源利用率和提高軟件性能的重要工具,所以下面我們就來看看Coroutine池化的具體實現(xiàn)吧
    2024-01-01
  • Python使用matplotlib繪圖無法顯示中文問題的解決方法

    Python使用matplotlib繪圖無法顯示中文問題的解決方法

    這篇文章主要介紹了Python使用matplotlib繪圖無法顯示中文問題的解決方法,結(jié)合具體實例形式分析了Python使用matplotlib繪圖時出現(xiàn)中文亂碼的原因與相關(guān)解決方法,需要的朋友可以參考下
    2018-03-03
  • Python中的作用域==和is的區(qū)別及說明

    Python中的作用域==和is的區(qū)別及說明

    這篇文章主要介紹了Python中的作用域==和is的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • python爬蟲入門教程--正則表達式完全指南(五)

    python爬蟲入門教程--正則表達式完全指南(五)

    要想做爬蟲,不可避免的要用到正則表達式,如果是簡單的字符串處理,類似于split,substring等等就足夠了,可是涉及到比較復雜的匹配,當然是正則的天下,下面這篇文章主要給大家介紹了python爬蟲之正則表達式的相關(guān)資料,需要的朋友可以參考下。
    2017-05-05

最新評論

香港| 大足县| 合水县| 淮安市| 海伦市| 民权县| 阿尔山市| 肥城市| 略阳县| 婺源县| 威信县| 巩义市| 宿州市| 惠州市| 长顺县| 镇沅| 光泽县| 昭平县| 鲁山县| 金堂县| 江孜县| 车险| 泰来县| 涟水县| 兴海县| 隆昌县| 郴州市| 阿尔山市| 察隅县| 海盐县| 宜君县| 凤阳县| 抚远县| 台江县| 三台县| 大城县| 通山县| 富阳市| 通江县| 牡丹江市| 万源市|