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

詳解python中的三種命令行模塊(sys.argv,argparse,click)

 更新時間:2020年12月15日 15:00:50   作者:咸魚彬  
這篇文章主要介紹了python中的三種命令行模塊(sys.argv,argparse,click)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

Python作為一門腳本語言,經(jīng)常作為腳本接受命令行傳入?yún)?shù),Python接受命令行參數(shù)大概有三種方式。因為在日常工作場景會經(jīng)常使用到,這里對這幾種方式進行總結(jié)。

命令行參數(shù)模塊

這里命令行參數(shù)模塊平時工作中用到最多就是這三種模塊:sys.argv,argparse,click。sys.argv和argparse都是內(nèi)置模塊,click則是第三方模塊。

sys.argv模塊(內(nèi)置模塊)

先看一個簡單的示例:

#!/usr/bin/python
import sys

def hello(name, age, sex, *args):
  print("Hello, My name is {name}.".format(name=name))
  print("I'm {age} years old.".format(age=age))
  print("I'm a {sex}".format(sex=sex))

  print("Other word:\n{args}".format(args="\n".join(args)))


if __name__ == "__main__":
  file_name = sys.argv[0]
  name = sys.argv[1]
  age = sys.argv[2]
  sex = sys.argv[3]
  other = sys.argv[4:]
  hello(name, age, sex, *other)

調(diào)用腳本:

python test_sysargv.py zhangsan 13 man nibi ss

腳本輸出:

Hello, My name is zhangsan.
I'm 13 years old.
I'm a man
Other word:
nibi
ss

sys.argv模塊不難理解,命令參數(shù)作為列表傳入Python腳本中,argv[0]是腳本的名字,argv[1]則是第一個參數(shù),后面以此類推。所以在腳本中只需要提取列表中的參數(shù)即可使用。上面演示的是正確調(diào)用Python腳本的情況,下面則是調(diào)用失敗的情況。

錯誤調(diào)用腳本:

python test_sysargv.py zhangsan 13

錯誤輸出:

Traceback (most recent call last):
 File "test_sysargv.py", line 16, in <module>
  sex = sys.argv[3]
IndexError: list index out of range

關(guān)于錯誤也很好理解,經(jīng)典的列表索引超出范圍,之所列表索引超出范圍,沒有傳入足夠的參數(shù)。當然你可以使用try...except捕獲錯誤。但是這種做法太過死板,因為在命令行中必須按照腳本規(guī)定的參數(shù)順序輸入?yún)?shù),所以這種模塊使用一般是針對一些需要的參數(shù)比較少并且固定的腳本。

argparse模塊(內(nèi)置模塊)

同樣的先看一個簡單的示例:

#!/usr/bin/python
import argparse

parser = argparse.ArgumentParser(description='Test for argparse module.')  # 構(gòu)建命令參數(shù)實例
parser.add_argument("--name", "-n", help="name attribute: 非必要屬性")
parser.add_argument("--age", "-a", help="age attribute: 非必要屬性")
parser.add_argument("--sex", "-s", help="sex attribute: 非必要屬性")
parser.add_argument("--type", "-t", help="type attribute: 非必要屬性", required=True)
args = parser.parse_args()


def hello(name, age, sex, *args):
  print("Hello, My name is {name}.".format(name=name))
  print("I'm {age} years old.".format(age=age))
  print("I'm a {sex}".format(sex=sex))

  print("Other word:\n{args}".format(args="\n".join(args)))


if __name__ == "__main__":
  print("Format of transfer file: {type}".format(type=args.type))
  if args.name and args.age and args.sex:
    hello(args.name, args.age, args.sex)

執(zhí)行腳本:

python3 test_argparse.py -t json -n zhangsan -a 13 -s man

腳本成功輸出:

Format of transfer file: json
Hello, My name is zhangsan.
I'm 13 years old.
I'm a man
Other word:

關(guān)于argparse模塊的使用,首先需要生成一個命令行參數(shù)的實例,然后通過對這個對象添加屬性,添加需要從命令行獲取的參數(shù),包括哪些是必要參數(shù)(required=True),哪些非必要參數(shù),同時也可以對每個參數(shù)進行幫助提示(help="")。

而上面示例中分別添加了四個屬性,--name和-n同時可以再命令行中使用,都表示了參數(shù)name。ArgumentParser通過parse_ags()方法解析參數(shù),檢查命令行,將每個參數(shù)轉(zhuǎn)換為適當?shù)念愋?,所以在腳本中同時也可以使用args.n和args.name獲取到參數(shù),相對應的如果沒有傳入該參數(shù),腳本中則獲取到None。

查看命令行參數(shù)之后腳本的幫助提示:

python3 test_argparse.py -h
usage: test_argparse.py [-h] [--name NAME] [--age AGE] [--sex SEX] --type TYPE

Test for argparse module.

optional arguments:
 -h, --help      show this help message and exit
 --name NAME, -n NAME name attribute: 非必要屬性
 --age AGE, -a AGE   age attribute: 非必要屬性
 --sex SEX, -s SEX   sex attribute: 非必要屬性
 --type TYPE, -t TYPE type attribute: 非必要屬性

另外在添加命令行參數(shù)的屬性中,還有更多的設置,多余的可以參考Python官方文檔,里面都有詳細的標注,這里就不展開來講,總結(jié)的就是關(guān)于argparse模塊的使用非常簡便,同時十分人性化,也很符合日常工作的需要。

click模塊

先開一個簡單的使用示例:

#!/usr/bin/python
import click

@click.command()
@click.option("--name", default="zhangsan", help="name attribute: 非必要屬性")
@click.option("--age", help="age attribute", type=int)
@click.option("--sex", help="sex attribute")
@click.option("-t", help="type attribute: 必要屬性", required=True)
def hello(t, name, age, sex, *args):
  print("Format of transfer file: {type}".format(type=t))
  print("Hello, My name is {name}.".format(name=name))
  print("I'm {age} years old.".format(age=age))
  print("I'm a {sex}".format(sex=sex))

  print("Other word:\n{args}".format(args="\n".join(args)))


if __name__ == "__main__":
  hello()

執(zhí)行腳本:

python3 test_click.py -t 1 --age 13 --sex man

腳本輸出:

Format of transfer file: 1
Hello, My name is zhangsan.
I'm 13 years old.
I'm a man
Other word:

click模塊是Flask團隊優(yōu)秀的開源項目,使用方法和argparse模塊很相似,同樣為命令行封裝了大量的方法,使用者只需要專注代碼功能的實現(xiàn)。
click模塊和argparse模塊不同的地方就是,click模塊使用裝飾器的方式給函數(shù)添加命令行屬性,關(guān)于裝飾器簡單來講就是能夠在不修改原有函數(shù)的基礎(chǔ)上添加功能。雖然使用裝飾器但是添加命令行屬性的方式和argparse模塊很相似,包括options中常用的參數(shù)含義也有很多類似的地方。值得注意的就是一開始需要通過command()將函數(shù)成為命令行的接口。
關(guān)于的click模塊的就大致講到這里,其余有興趣的可以再去了解一下。

總結(jié)

關(guān)于這三個模塊值得注意的是,盡量貼近自己應用場景去選擇,真正的做到自己能夠方便使用才是你去使用這些模塊的原因。

以上就是詳解python中的三種命令行模塊(sys.argv,argparse,click)的詳細內(nèi)容,更多關(guān)于python 命令行模塊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中super的用法實例

    Python中super的用法實例

    這篇文章主要介紹了Python中super的用法實例,本文對比了普通繼承和super繼承的相關(guān)內(nèi)容,從運行結(jié)果上看,普通繼承和super繼承是一樣的,但是其實它們的內(nèi)部運行機制不一樣,這一點在多重繼承時體現(xiàn)得很明顯,需要的朋友可以參考下
    2015-05-05
  • python定間隔取點(np.linspace)的實現(xiàn)

    python定間隔取點(np.linspace)的實現(xiàn)

    今天小編就為大家分享一篇python定間隔取點(np.linspace)的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python完整實現(xiàn)俄羅斯方塊游戲全解

    Python完整實現(xiàn)俄羅斯方塊游戲全解

    俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯(lián)設計和編程的益智類視頻游戲。本文將利用python實現(xiàn)這一經(jīng)典的小游戲,需要的可以參考一下
    2022-03-03
  • Python實現(xiàn)手寫一個類似django的web框架示例

    Python實現(xiàn)手寫一個類似django的web框架示例

    這篇文章主要介紹了Python實現(xiàn)手寫一個類似django的web框架,結(jié)合具體實例形式分析了Python自定義簡單控制器、URL路由、視圖模型等功能,實現(xiàn)類似Django框架的web應用相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python并發(fā)編程線程消息通信機制詳解

    Python并發(fā)編程線程消息通信機制詳解

    這篇文章主要為大家介紹了Python并發(fā)編程之線程消息通信機制的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 使用實現(xiàn)python連接hive數(shù)倉的示例代碼

    使用實現(xiàn)python連接hive數(shù)倉的示例代碼

    這篇文章主要為大家詳細介紹了使用實現(xiàn)python連接hive數(shù)倉的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • Python獲取昨天、今天、明天開始、結(jié)束時間戳的方法

    Python獲取昨天、今天、明天開始、結(jié)束時間戳的方法

    今天小編就為大家分享一篇Python獲取昨天、今天、明天開始、結(jié)束時間戳的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • keras 權(quán)重保存和權(quán)重載入方式

    keras 權(quán)重保存和權(quán)重載入方式

    這篇文章主要介紹了keras 權(quán)重保存和權(quán)重載入方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python多線程原理與用法詳解

    Python多線程原理與用法詳解

    這篇文章主要介紹了Python多線程原理與用法,簡單描述了多線程的概念、原理并結(jié)合實例形式分析了Python多線程創(chuàng)建、啟動、各種鎖機制、隊列及相關(guān)函數(shù)使用技巧,需要的朋友可以參考下
    2018-08-08
  • python包的導入方式總結(jié)

    python包的導入方式總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python包的導入方式總結(jié)內(nèi)容,有興趣的朋友們可以學習下。
    2021-03-03

最新評論