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

python 如何利用argparse解析命令行參數(shù)

 更新時(shí)間:2020年09月11日 16:13:25   作者:TechFlow2019  
這篇文章主要介紹了python 利用argparse解析命令行參數(shù)的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

命令行參數(shù)工具是我們非常常用的工具,比如當(dāng)我們做實(shí)驗(yàn)希望調(diào)節(jié)參數(shù)的時(shí)候,如果參數(shù)都是通過硬編碼寫在代碼當(dāng)中的話,我們每次修改參數(shù)都需要修改對(duì)應(yīng)的代碼和邏輯顯然這不太方便。比較好的辦法就是把必要的參數(shù)設(shè)置成通過命令行傳入的形式,這樣我們只需要在運(yùn)行的時(shí)候修改參數(shù)就可以了。

sys.argv

解析命令行傳入?yún)?shù)最簡(jiǎn)單的辦法就是通過sys.argv,sys.argv可以獲取到我們通過命令行傳入的參數(shù)。

import sys

print(sys.argv)

用法很簡(jiǎn)單,只需要調(diào)用sys.argv即可。argv是一個(gè)數(shù)組,如果參數(shù)有多個(gè),我們可以通過下標(biāo)進(jìn)行訪問。但是有一點(diǎn)需要注意,argv當(dāng)中存儲(chǔ)的結(jié)果是從Python調(diào)用開始的。

我們來看一個(gè)例子,我們隨意傳入一些參數(shù),print sys.argv之后是這樣的。

python test.py -a -c -d=222 
>>> ['test.py', '-a', '-c', '-d=222']

也就是說我們python運(yùn)行test.py這個(gè)文件名也當(dāng)做參數(shù)之一,所以我們要獲取自定義參數(shù)的話需要從argv[1]開始。

sys.argv的好處是方便,我們只需要訪問它就可以拿到傳入的參數(shù)了。但是缺點(diǎn)也很明顯,就是功能太少了。假如我們是看其他大神的代碼,我們想要知道運(yùn)行的時(shí)候需要傳入什么參數(shù),以及每個(gè)參數(shù)代表什么含義就做不到了。

為了解決這個(gè)問題,我們需要使用封裝更多功能的工具,也是本篇文章的核心——argparse。

基本用法

argparse是Python當(dāng)中的一個(gè)庫,我們需要先import一下,這個(gè)庫我沒記錯(cuò)應(yīng)該是Python自帶的,也不需要安裝,我們直接就可以使用。

在我們使用之前,我們需要先初始化這個(gè)parse,也就是一個(gè)參數(shù)解析器。

# 這里ArgumentParser可以傳入一個(gè)字符串,表示用途
parser = argparse.ArgumentParser()
parser.parse_args()

這個(gè)時(shí)候其實(shí)就已經(jīng)有了一個(gè)解析器了,我們?cè)谶\(yùn)行的時(shí)候可以傳入?yún)?shù)-h,表示help,也就是查看目前解析器當(dāng)中定義的參數(shù)。由于我們現(xiàn)在什么也沒有,所以能顯示出來的就只有help。

必選參數(shù)

首先我們來介紹必選參數(shù),它的定義和函數(shù)當(dāng)中的必填參數(shù)是一樣的,也就是說我們運(yùn)行程序必須要的參數(shù)。如果不傳,那么程序不應(yīng)該執(zhí)行會(huì)進(jìn)行報(bào)錯(cuò)并提示。

定義必選參數(shù)的方法非常簡(jiǎn)單,我們只需要通過add_argument傳入?yún)?shù)的名稱就可以了。

import argparse

parser = argparse.ArgumentParser("For test the parser")
parser.add_argument('test')
args = parser.parse_args()

print(args.test)

這樣我們就定義了一個(gè)名叫test的參數(shù),我們可以通過args.test來訪問它。

這個(gè)時(shí)候我們?cè)龠\(yùn)行python test.py -h就會(huì)發(fā)現(xiàn)提示的信息當(dāng)中多了一行:

告訴我們必選參數(shù)當(dāng)中有test,必選參數(shù)直接傳入,不需要加上前綴。所以我們執(zhí)行的時(shí)候直接python test.py xxx就可以了。

可選參數(shù)

有必選參數(shù)當(dāng)然就有可選參數(shù),可選參數(shù)由于可選可不選, 所以我們?cè)谑褂玫臅r(shí)候需要在參數(shù)前加上標(biāo)識(shí)-或者--。比如我們參數(shù)名叫做test,可以定義成-test或者--test,這兩種都可以,也可以這兩種都定義。

parser.add_argument('-test', '--test')

我們運(yùn)行-h可以發(fā)現(xiàn)optional arguments當(dāng)中多了test和--test。

但是這個(gè)只print出來了參數(shù)名,并沒有告訴我們這個(gè)參數(shù)究竟是做什么的,像是help參數(shù)后面就跟了show this help message and exit這個(gè)提示語。如果我們也希望help能夠提示我們參數(shù)的作用怎么辦呢?

我們可以通過help參數(shù)傳入我們希望打印出來的提示語,這樣方便使用者在使用的時(shí)候了解參數(shù)的情況。

比如我們把這行語句改成:

parser.add_argument('-test', '--test', help='just for help')

這樣當(dāng)我們運(yùn)行的時(shí)候,就會(huì)看到提示語了:

默認(rèn)值

如果參數(shù)很多的時(shí)候,我們有時(shí)候可能不希望每一個(gè)都指定一個(gè)值,而是希望可以在不填的時(shí)候有一個(gè)默認(rèn)值。這個(gè)想法非常正常,想要做到這點(diǎn)也很簡(jiǎn)單,我們可以通過default參數(shù)來指定。

import argparse

parser = argparse.ArgumentParser("For test the parser")
parser.add_argument('-test', '--test', default=1, help='just for help')
args = parser.parse_args()

print(args.test)

比如這樣我們?cè)诖a當(dāng)中把test參數(shù)的默認(rèn)值設(shè)置成了1,當(dāng)我們運(yùn)行的時(shí)候,如果不填test這個(gè)參數(shù)的話,那么程序就會(huì)使用它的默認(rèn)值也就是1。

但有一點(diǎn)默認(rèn)值的信息并不會(huì)print在help當(dāng)中,所以我們需要自己在提示語當(dāng)中告知使用者默認(rèn)值是多少。

type

我們可以定義參數(shù)的默認(rèn)值,當(dāng)然也可以定義它的類型。

因?yàn)槊钚袀魅氲膮?shù)默認(rèn)都是字符串,如果我們要進(jìn)行數(shù)學(xué)上的計(jì)算,使用str還需要自己轉(zhuǎn)換,這就很不方便。我們可以在傳入?yún)?shù)的時(shí)候就完成類型的匹配,這樣如果傳入?yún)?shù)的類型不對(duì), 那么直接報(bào)錯(cuò),不往下運(yùn)行。

想要做到這點(diǎn)也很簡(jiǎn)單,通過type參數(shù)就可以實(shí)現(xiàn)。

parser.add_argument('-test', '--test', default=1, type=int, help='just for help')

比如當(dāng)我們定義了一個(gè)int型的參數(shù),而傳入的是類型不匹配的話,那么就會(huì)引起報(bào)錯(cuò):

報(bào)錯(cuò)信息當(dāng)中寫得很清楚,我們得到了一個(gè)無效的int的值,它是abc。

可選值

它同樣還支持可選值,可選值很好理解,就是我們希望限定傳入?yún)?shù)的范圍僅僅在幾個(gè)值當(dāng)中。比如說我們希望傳入的值不是0就是1,或者是在某幾個(gè)具體的值當(dāng)中,這個(gè)時(shí)候我們可以通過choices參數(shù)來實(shí)現(xiàn)這一點(diǎn)。

choices參數(shù)傳入的是一個(gè)list,也就是我們的限定范圍,只有在這個(gè)范圍當(dāng)中的值才被允許。

parser.add_argument('-test', '--test', default=1, choices=[2, 3, 4], type=int, help='just for help')

如果我們運(yùn)行傳入test=1,那么就會(huì)引起報(bào)錯(cuò),告訴我們傳入的值不在choices范圍當(dāng)中。

這是一個(gè)挺有意思的例子,仔細(xì)看會(huì)發(fā)現(xiàn)我們默認(rèn)值設(shè)置成了1,但是可選值當(dāng)中并沒有1。這也是允許的,默認(rèn)值可以不在可選值范圍內(nèi),但是當(dāng)我們傳入1就會(huì)觸發(fā)可選值校驗(yàn)。

action

action是一個(gè)很神奇也很有用的操作,可以指定參數(shù)的處理方式。我們默認(rèn)的方式是store,也就是存儲(chǔ)的意思,這個(gè)我們都能理解。除此之外,還有store_true,它表示出現(xiàn)則是true,否則是false。

parser.add_argument('-test', '--test', action='store_true', help='just for help')

當(dāng)我們把test參數(shù)的定義改成這樣之后,我們來對(duì)比一下運(yùn)行的結(jié)果就明白了。

除了store_true之外還有store_const,也就是說出現(xiàn)就指定為一個(gè)固定值。

parser.add_argument('-test', '--test', action='store_const', const=23, help='just for help')

這樣當(dāng)我們指定-test參數(shù)之后,它會(huì)自動(dòng)被賦值成23。

除了這兩個(gè)之外,另外一個(gè)很常用的參數(shù)是append,可以將多次出現(xiàn)的同一個(gè)參數(shù)自動(dòng)存入一個(gè)list當(dāng)中。

parser.add_argument('-test', '--test', action='append', type=int, help='just for help')

nargs

nargs也是一個(gè)非常有用的參數(shù),可以對(duì)參數(shù)進(jìn)行一些花式操作。nargs的傳入?yún)?shù)有以下幾種,首先是N,也就是一個(gè)整數(shù)。代表可以接收N個(gè)參數(shù)值,這N個(gè)值會(huì)被存入一個(gè)list當(dāng)中。

parser.add_argument('-test', '--test', nargs=2, type=int, help='just for help')

另外一種傳入的參數(shù)是'+'或者是'*',它可以將任意多個(gè)值存入一個(gè)list當(dāng)中。

parser.add_argument('-test', '--test', nargs='*', type=int, help='just for help')

總結(jié)

有了parser之后,我們?cè)赑ython當(dāng)中處理命令行參數(shù)會(huì)變得非常簡(jiǎn)單,我們可以做各種各樣的定制化操作。除了我們上面介紹的之外,還有一些其他的做法,相對(duì)來說不是非常常用,所以就不一一窮盡了,感興趣的同學(xué)可以自行了解一下。

以上就是python 如何利用argparse解析命令行參數(shù)的詳細(xì)內(nèi)容,更多關(guān)于python 解析命令行的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于PyQt制作小紅書圖片抓取工具

    基于PyQt制作小紅書圖片抓取工具

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt制作一個(gè)小紅書圖片抓取工具,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy())

    python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy())

    本文主要介紹了python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy()),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python自動(dòng)化測(cè)試中yaml文件讀取操作

    Python自動(dòng)化測(cè)試中yaml文件讀取操作

    這篇文章主要介紹了Python自動(dòng)化測(cè)試中yaml文件讀取操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python爬蟲請(qǐng)求頭的使用

    python爬蟲請(qǐng)求頭的使用

    這篇文章主要介紹了python爬蟲請(qǐng)求頭的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python利用matplotlib實(shí)現(xiàn)餅圖繪制

    Python利用matplotlib實(shí)現(xiàn)餅圖繪制

    Pyplot作為Matplotlib的子庫,提供了和MATLAB差不多的繪圖API。因此Pyplot作為常用的繪圖模塊,能很方便讓用戶繪制2D圖表。本文將為大家介紹如何利用Matplotlib繪制餅圖,感興趣的小伙伴可以了解一下
    2021-12-12
  • python 通過xml獲取測(cè)試節(jié)點(diǎn)和屬性的實(shí)例

    python 通過xml獲取測(cè)試節(jié)點(diǎn)和屬性的實(shí)例

    下面小編就為大家分享一篇python 通過xml獲取測(cè)試節(jié)點(diǎn)和屬性的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Python的GUI框架PySide的安裝配置教程

    Python的GUI框架PySide的安裝配置教程

    這篇文章主要介紹了Python的GUI框架PySide的安裝配置教程,PySide也是用來使用Qt的GUI庫,需要的朋友可以參考下
    2016-02-02
  • Python保留數(shù)據(jù)并刪除Excel單元格的函數(shù)和公式

    Python保留數(shù)據(jù)并刪除Excel單元格的函數(shù)和公式

    在分析處理Excel表格時(shí),我們可能需要使用各種公式或函數(shù)對(duì)表格數(shù)據(jù)進(jìn)行計(jì)算,從而分析出更多的信息,但在展示、分享或再利用分析結(jié)果時(shí),我們可能需要將含有公式的單元格轉(zhuǎn)換為靜態(tài)數(shù)值,本文將介紹如何使用Python代碼批量移除Excel單元格中的公式并保留數(shù)值
    2024-10-10
  • Python pandas 列轉(zhuǎn)行操作詳解(類似hive中explode方法)

    Python pandas 列轉(zhuǎn)行操作詳解(類似hive中explode方法)

    這篇文章主要介紹了Python pandas 列轉(zhuǎn)行操作詳解(類似hive中explode方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python 爬蟲如何實(shí)現(xiàn)百度翻譯

    python 爬蟲如何實(shí)現(xiàn)百度翻譯

    這篇文章主要介紹了python 爬蟲 簡(jiǎn)單實(shí)現(xiàn)百度翻譯的示例,幫助大家更好的理解和使用python 爬蟲,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

龙游县| 治县。| 普格县| 化州市| 奉节县| 清徐县| 新蔡县| 金塔县| 招远市| 聂拉木县| 正阳县| 鹤岗市| 比如县| 无锡市| 益阳市| 扎囊县| 耿马| 淅川县| 林州市| 寿光市| 邹城市| 竹溪县| 内江市| 荆州市| 沛县| 浮梁县| 通山县| 南平市| 成安县| 丁青县| 新密市| 全椒县| 永寿县| 南召县| 深泽县| 义马市| 抚远县| 长白| 开封市| 定边县| 静乐县|