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

Python命令行參數(shù)化的四種方式詳解

 更新時(shí)間:2022年06月27日 09:36:16   作者:我愛(ài)Python數(shù)據(jù)挖掘  
在日常編寫(xiě) Python 腳本的過(guò)程中,我們經(jīng)常需要結(jié)合命令行參數(shù)傳入一些變量參數(shù),使項(xiàng)目使用更加的靈活方便。本文章羅列了構(gòu)建 Python命令行參數(shù)的4種常見(jiàn)方式,需要的可以參考一下

大家好,在日常編寫(xiě) Python 腳本的過(guò)程中,我們經(jīng)常需要結(jié)合命令行參數(shù)傳入一些變量參數(shù),使項(xiàng)目使用更加的靈活方便

本篇文章我將羅列出構(gòu)建 Python 命令行參數(shù)的 4 種常見(jiàn)方式

它們分別是:

  • 內(nèi)置 sys.argv 模塊
  • 內(nèi)置 argparse 模塊
  • 內(nèi)置 getopt 模塊
  • 第三方依賴(lài)庫(kù) click

1. sys.argv

構(gòu)建命令行參數(shù)最簡(jiǎn)單、常見(jiàn)的方式是利用內(nèi)置的「 sys.argv 」模塊

它是將參數(shù)以一個(gè)有序的列表傳入,所以在使用時(shí)傳參順序必須固定

因此,這種方式適用于參數(shù)個(gè)數(shù)少且場(chǎng)景固定的項(xiàng)目中

import sys

if __name__ == '__main__':
    # 獲取參數(shù)列表
    # 注意:sys.argv[0] 代表第一個(gè)參數(shù),即:腳本名稱(chēng)「1_sys.argv.py」
    # 其他參數(shù)列表
    args = sys.argv[1:]

    # 參數(shù)個(gè)數(shù)
    args_length = len(sys.argv) if sys.argv else 0

    print("排除運(yùn)行主文件參數(shù),其他參數(shù)列表為:", args)

    print("參數(shù)總數(shù):", args_length)

# 使用
# python3 1_sys.argv.py arg1 arg2
# 排除運(yùn)行主文件參數(shù),其他參數(shù)列表為: [arg1, arg1]
# 參數(shù)總數(shù):3

需要注意的是,在腳本中通過(guò)「 sys.argv 」獲取的參數(shù)列表中,第一個(gè)參數(shù)代表腳本主文件名稱(chēng)

2. argparse

內(nèi)置的 argparse 模塊可以非常輕松地編寫(xiě)出友好的命令行參數(shù)腳本,并且它能自動(dòng)生成幫助使用手冊(cè),在用戶(hù)給程序傳入無(wú)效參數(shù)時(shí)能拋出清晰的錯(cuò)誤信息

官方文檔

使用它構(gòu)建命令行參數(shù)包含 3 個(gè)步驟:

構(gòu)建參數(shù)解析對(duì)象添加參數(shù)添加參數(shù)解析參數(shù)

1.構(gòu)建命令行參數(shù)解析對(duì)象

import argparse
...
# 構(gòu)建一個(gè)命令行參數(shù)解析對(duì)象
parser = argparse.ArgumentParser(description='命令行參數(shù)')
...

2.添加命令行參數(shù)

需要指出的是,--arg1 用于指定參數(shù)名稱(chēng),-a1 代表 dest 目標(biāo)變量值(簡(jiǎn)寫(xiě))

...
# 設(shè)置3個(gè)參數(shù)
# 參數(shù)1:arg1,整型,非必須傳入?yún)?shù)
# 參數(shù)2:arg2,字符串,非必須傳入?yún)?shù),包含默認(rèn)值「xag」
# 參數(shù)3:arg3,字符串類(lèi)型,必須傳入的參數(shù)
parser.add_argument('--arg1', '-a1', type=int, help='參數(shù)1,非必須參數(shù)')
parser.add_argument('--arg2', '-a2', type=str, help='參數(shù)2,非必須參數(shù),包含默認(rèn)值', default='xag')
parser.add_argument('--arg3', '-a3', type=str, help='參數(shù)3,必須參數(shù)', required=True)
...

3.解析出參數(shù)值

...
# 解析參數(shù),獲取所有的命令行參數(shù)(Namespace),然后轉(zhuǎn)為字典
args = vars(parser.parse_args())

# 獲取所有參數(shù)
print("所有命令行參數(shù)為:")
for key in args:
    print(f"命令行參數(shù)名:{key},參數(shù)值:{args[key]}")
...

使用的時(shí)候,我們就可以通過(guò)「 -h / --help 」命令參數(shù)查看幫助文檔

# 查看命令行參數(shù)幫助文檔
python3 2_argparse.py --help
# 或
python3 2_argparse.py -h

上面添加的 3 個(gè)參數(shù),參數(shù) arg1、arg2 非必須傳值,arg3 必須傳值,另外參數(shù) arg2 指定了默認(rèn)值

# 參數(shù)arg3必須,參數(shù)arg1和參數(shù)arg2非必須,其中參數(shù)arg2設(shè)置了默認(rèn)值

# 傳入?yún)?shù)arg3
# python3 2_argparse.py --arg3 123
# python3 2_argparse.py -a3 123 
xingag@xingagdeMacBook-Pro args % python3 2_argparse.py -a3 123  
所有命令行參數(shù)為:
命令行參數(shù)名:arg1,參數(shù)值:None
命令行參數(shù)名:arg2,參數(shù)值:xag
命令行參數(shù)名:arg3,參數(shù)值:123

# 傳入?yún)?shù)arg1、arg3
xingag@xingagdeMacBook-Pro args % python3 2_argparse.py -a1 111  -a3 123  
所有命令行參數(shù)為:
命令行參數(shù)名:arg1,參數(shù)值:111
命令行參數(shù)名:arg2,參數(shù)值:xag
命令行參數(shù)名:arg3,參數(shù)值:123

# 傳入?yún)?shù)arg1、arg2、arg3
xingag@xingagdeMacBook-Pro args % python3 2_argparse.py -a1 111 -a2 222  -a3 123
所有命令行參數(shù)為:
命令行參數(shù)名:arg1,參數(shù)值:111
命令行參數(shù)名:arg2,參數(shù)值:222
命令行參數(shù)名:arg3,參數(shù)值:123

3. getopt

getopt 是 Python 中一個(gè)內(nèi)置標(biāo)準(zhǔn)模塊,可以結(jié)合 sys.argv 模塊,直接解析腳本運(yùn)行時(shí)參數(shù)

使用格式:getopt(args,shortopts,longopts = [])

其中

args

參數(shù)列表,可以通過(guò) sys.argv 獲取,可以參考上面

shortopts 短參數(shù)組成的字符串

定義短參數(shù),如果參數(shù)有值,需要在短參數(shù)后追加一個(gè)「 : 」符號(hào)

傳參使用方式:-n 23

longopts 長(zhǎng)參數(shù)列表

定義長(zhǎng)參數(shù)列表時(shí),如果某個(gè)參數(shù)有值,需要在短參數(shù)后追加一個(gè)「 = 」符號(hào)

傳參使用方式:–port 8080

這里以傳入數(shù)據(jù)庫(kù)連接參數(shù)為例(參數(shù)包含 ip、用戶(hù)名、密碼、數(shù)據(jù)庫(kù)名稱(chēng))進(jìn)行講解

from getopt import getopt
import sys

# 獲取參數(shù)
# sys.argv[1:]:獲取除腳本文件名外的所有命令行參數(shù)
# opts:存有所有選項(xiàng)及其輸入值的元組列表
# args:去除有用的輸入以后剩余的部分
opts, args = getopt(sys.argv[1:], 'i:u:p:d:', ['ip=', 'user=', 'pwd=', 'db='])

# 獲取參數(shù)值
# 短參數(shù)
# python3 4_getopt.py -i 127.0.0.1 -u root -p 123456 -d mysqldb
# 長(zhǎng)參數(shù)
# python3 4_getopt.py --ip 127.0.0.1 -u root -p 123456 -d mysqldb
ip_pre = [item[1] for item in opts if item[0] in ('-i', '--ip')]
ip = ip_pre[0] if len(ip_pre) > 0 else None
print("參數(shù)ip:", ip)

user_pre = [item[1] for item in opts if item[0] in ('-u', '--user')]
user = user_pre[0] if len(user_pre) > 0 else None
print("參數(shù)user:", user)

pwd_pre = [item[1] for item in opts if item[0] in ('-p', '--pwd')]
pwd = pwd_pre[0] if len(pwd_pre) > 0 else None
print("參數(shù)pwd:", pwd)

db_pre = [item[1] for item in opts if item[0] in ('-d', '--db')]
db = db_pre[0] if len(db_pre) > 0 else None
print("參數(shù)db:", db)

在運(yùn)行腳本時(shí),我們可以利用「 短參數(shù) 」或「 長(zhǎng)參數(shù) 」形式進(jìn)行傳遞

# 測(cè)試
# 短參數(shù)
python3 4_getopt.py -i 127.0.0.1 -u root -p 123456 -d mysqldb

# 長(zhǎng)參數(shù)
python3 4_getopt.py --ip 127.0.0.1 --user root --pwd 123456 --db mysqldb

4. click

click 作為第三方依賴(lài)庫(kù),它為命令行工具封裝了大量的方法,可以非常方便實(shí)現(xiàn)命令行參數(shù)

項(xiàng)目地址

首先,我們需要安裝依賴(lài)庫(kù) click

import click

# 安裝依賴(lài)
# pip3 install -U click

@click.command()
@click.option('--arg1', default='111', help='參數(shù)arg1,默認(rèn)值為「111」')
@click.option('--arg2', type=int, help='參數(shù)arg2')
@click.option('--arg3', type=str, help='參數(shù)arg3')
def start(arg1, arg2, arg3):
    """
    基于參數(shù)arg1、參數(shù)arg2、參數(shù)arg3運(yùn)行項(xiàng)目
    :param arg1:
    :param arg2:
    :param arg3:
    :return:
    """
    print("參數(shù)arg1值為:", arg1)
    print("參數(shù)arg2值為:", arg2)
    print("參數(shù)arg3值為:", arg3)


if __name__ == '__main__':
    start()

然后,在主運(yùn)行函數(shù)上通過(guò)裝飾器配置參數(shù)即可

比如,上面就定義了 3 個(gè)命令行參數(shù) arg1、arg2、arg3,并設(shè)置了參數(shù)的類(lèi)型及默認(rèn)值

最后,在運(yùn)行腳本時(shí)只需要按參數(shù)設(shè)定傳遞對(duì)應(yīng)的值即可

# 不包含參數(shù)
xingag@xingagdeMacBook-Pro args % python3 3_click.py 
參數(shù)arg1值為: 111
參數(shù)arg2值為: None
參數(shù)arg3值為: None

# 包含參數(shù)arg1
xingag@xingagdeMacBook-Pro args % python3 3_click.py --arg1 test1
參數(shù)arg1值為: test1
參數(shù)arg2值為: None
參數(shù)arg3值為: None

# 包含參數(shù)arg1、arg2
# 注意:arg2的參數(shù)類(lèi)型為整形,傳入的參數(shù)必須能轉(zhuǎn)為整形,否則會(huì)報(bào)錯(cuò)
xingag@xingagdeMacBook-Pro args % python3 3_click.py --arg1 test1 --arg2 222  
參數(shù)arg1值為: test1
參數(shù)arg2值為: 222
參數(shù)arg3值為: None

# 包含參數(shù)arg1、arg2、arg3
xingag@xingagdeMacBook-Pro args % python3 3_click.py --arg1 test1 --arg2 222 --arg3 test3
參數(shù)arg1值為: test1
參數(shù)arg2值為: 222
參數(shù)arg3值為: test3

最后

上面通過(guò)實(shí)例講解了實(shí)現(xiàn) Python 命令行參數(shù)常見(jiàn)的 4 種方式

對(duì)于一些簡(jiǎn)單自用且不那么正規(guī)的場(chǎng)景,個(gè)人覺(jué)得可以考慮用 sys.argv 模塊快速構(gòu)建命令行參數(shù);而對(duì)一些參數(shù)多、面向用戶(hù)的正式生產(chǎn)環(huán)境,建議利用 argparse 模塊或 click 依賴(lài)來(lái)創(chuàng)建命令行參數(shù)

到此這篇關(guān)于Python命令行參數(shù)化的四種方式詳解的文章就介紹到這了,更多相關(guān)Python命令行參數(shù)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python一鍵實(shí)現(xiàn)PDF文檔批量轉(zhuǎn)Word

    Python一鍵實(shí)現(xiàn)PDF文檔批量轉(zhuǎn)Word

    無(wú)論是在工作還是學(xué)習(xí)當(dāng)中,大家都會(huì)遇到這樣一個(gè)問(wèn)題,將“PDF當(dāng)中的內(nèi)容(文本和圖片)轉(zhuǎn)換為Word的格式”,本文將用Python實(shí)現(xiàn)一鍵批量將PDF轉(zhuǎn)Word,需要的可以參考一下
    2022-08-08
  • django一對(duì)多模型以及如何在前端實(shí)現(xiàn)詳解

    django一對(duì)多模型以及如何在前端實(shí)現(xiàn)詳解

    這篇文章主要介紹了django一對(duì)多模型以及如何在前端實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python中調(diào)用其他程序的方式詳解

    Python中調(diào)用其他程序的方式詳解

    這篇文章主要介紹了Python中調(diào)用其他程序的方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 如何用Python中19行代碼把照片寫(xiě)入到Excel中

    如何用Python中19行代碼把照片寫(xiě)入到Excel中

    這篇文章主要介紹了如何利用Python3中的19行代碼把照片寫(xiě)入到Excel中,文章內(nèi)容實(shí)現(xiàn)的不是截取一張圖片,粘貼到excel,而是通過(guò)像素寫(xiě)入到excel中,需要的朋友可以參考一下
    2022-02-02
  • python分割一個(gè)文本為多個(gè)文本的方法

    python分割一個(gè)文本為多個(gè)文本的方法

    這篇文章主要為大家詳細(xì)介紹了python分割一個(gè)文本為多個(gè)文本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python?turtle繪制多邊形和跳躍和改變速度特效

    python?turtle繪制多邊形和跳躍和改變速度特效

    這篇文章主要介紹了python?turtle繪制多邊形和跳躍和改變速度特效,文章實(shí)現(xiàn)過(guò)程詳細(xì),需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-03-03
  • Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程

    Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程

    這篇文章主要介紹了Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程,本文的例子主要針對(duì)類(lèi)UNIXZ系統(tǒng),需要的朋友可以參考下
    2015-04-04
  • 在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程

    在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程

    這篇文章主要介紹了在pycharm中使用pipenv來(lái)創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python3自動(dòng)安裝第三方庫(kù),跟pip說(shuō)再見(jiàn)

    Python3自動(dòng)安裝第三方庫(kù),跟pip說(shuō)再見(jiàn)

    很多朋友私信小編Python安裝第三方庫(kù)安裝技巧,在這就不一一回復(fù)大家了,今天小編給大家分享一篇教程關(guān)于Python自動(dòng)安裝第三方庫(kù)的小技巧,本文以安裝plotly為例給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • 詳解Python裝飾器 給你的咖啡加點(diǎn)料

    詳解Python裝飾器 給你的咖啡加點(diǎn)料

    今天你的咖啡加糖了嗎? 讓我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)引出裝飾器的概念及用法。在引出裝飾器之前,我們先來(lái)了解一下函數(shù)的概念,感興趣的朋友跟隨小編一起看看吧
    2021-07-07

最新評(píng)論