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

Python命令行解析模塊詳解

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

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

Python命令行常見(jiàn)的解析器有兩種,一是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模塊使得編寫(xiě)用戶友好的命令行接口非常容易。程序只需定義好它要求的參數(shù),然后argparse將負(fù)責(zé)如何從sys.argv中解析出這些參數(shù)。argparse模塊還會(huì)自動(dòng)生成幫助和使用信息并且當(dāng)用戶賦給程序非法的參數(shù)時(shí)產(chǎn)生錯(cuò)誤信息。
使用argparse模塊一般需要三個(gè)步驟:

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

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

>>> parser= argparse.ArgumentParser()

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

2. 添加參數(shù)

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

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

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

3. 解析參數(shù)

ArgumentParser通過(guò)parse_args()方法解析參數(shù)。它將檢查命令行,把每個(gè)參數(shù)轉(zhuǎn)換成恰當(dāng)?shù)念?lèi)型并采取恰當(dāng)?shù)膭?dòng)作。在大部分情況下,這意味著將從命令行中解析出來(lái)的屬性建立一個(gè)簡(jiǎn)單的 Namespace對(duì)象。

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

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

ArgumentParser 對(duì)象

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)建一個(gè)新的argmentParserr對(duì)象。所有的參數(shù)應(yīng)該以關(guān)鍵字參數(shù)傳遞。下面有對(duì)每個(gè)參數(shù)各自詳細(xì)的描述,但是簡(jiǎn)短地講它們是:

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

add_argument() 方法

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

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

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

總結(jié)

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

相關(guān)文章

  • Python圖像處理之邊緣檢測(cè)原理詳解

    Python圖像處理之邊緣檢測(cè)原理詳解

    邊緣檢測(cè)是圖像處理和計(jì)算機(jī)視覺(jué)當(dāng)中的基本問(wèn)題,邊緣檢測(cè)的目的是標(biāo)識(shí)數(shù)字圖像中亮度變化明顯的點(diǎn)。本文將通過(guò)示例和大家介紹一下邊緣檢測(cè)的原理,希望對(duì)大家有所幫助
    2022-12-12
  • python繪制春節(jié)煙花的示例代碼

    python繪制春節(jié)煙花的示例代碼

    這篇文章主要介紹了使用python 實(shí)現(xiàn)的簡(jiǎn)單春節(jié)煙花效果的示例代碼,請(qǐng)注意,運(yùn)行本文的代碼之前,請(qǐng)確保計(jì)算機(jī)上已經(jīng)安裝了Pygame庫(kù),需要的朋友可以參考下
    2024-02-02
  • 將Python字符串生成PDF的實(shí)例代碼詳解

    將Python字符串生成PDF的實(shí)例代碼詳解

    這篇文章主要介紹了將Python字符串生成PDF的實(shí)例代碼,本文通過(guò)代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • Python使用Apache Kafka時(shí)Poll拉取速度慢的解決方法

    Python使用Apache Kafka時(shí)Poll拉取速度慢的解決方法

    在使用Apache Kafka時(shí),poll方法拉取消息速度慢常見(jiàn)于網(wǎng)絡(luò)延遲、消息大小過(guò)大、消費(fèi)者配置不當(dāng)或高負(fù)載情況,本文提供了優(yōu)化消費(fèi)者配置、并行消費(fèi)、優(yōu)化消息處理邏輯和監(jiān)控調(diào)試的解決方案,并附有Python代碼示例和相關(guān)類(lèi)圖、序列圖以幫助理解和實(shí)現(xiàn)
    2024-09-09
  • 淺談python 中類(lèi)屬性共享的問(wèn)題

    淺談python 中類(lèi)屬性共享的問(wèn)題

    今天小編就為大家分享一篇淺談python 中類(lèi)屬性共享的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 解決python 打包成exe太大的問(wèn)題

    解決python 打包成exe太大的問(wèn)題

    這篇文章主要介紹了解決python 打包成exe太大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python configparser中默認(rèn)值的設(shè)定方式

    python configparser中默認(rèn)值的設(shè)定方式

    這篇文章主要介紹了python configparser中默認(rèn)值的設(shè)定方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python try...finally...的實(shí)現(xiàn)方法

    python try...finally...的實(shí)現(xiàn)方法

    這篇文章主要介紹了python try...finally...的實(shí)現(xiàn)方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 淺談Python中os模塊及shutil模塊的常規(guī)操作

    淺談Python中os模塊及shutil模塊的常規(guī)操作

    這篇文章主要介紹了淺談Python中os模塊及shutil模塊的常規(guī)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python求兩個(gè)list的差集、交集與并集的方法

    Python求兩個(gè)list的差集、交集與并集的方法

    這篇文章主要介紹了Python求兩個(gè)list的差集、交集與并集的方法,是Python集合數(shù)組操作中常用的技巧,需要的朋友可以參考下
    2014-11-11

最新評(píng)論