<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最全總結(jié) | 聊聊 Python 命令行參數(shù)化的幾種方式!

          共 7275字,需瀏覽 15分鐘

           ·

          2022-06-28 19:04




          點(diǎn)擊上方“AirPython”,選擇“加為星標(biāo)

          第一時(shí)間關(guān)注 Python 原創(chuàng)干貨!


          1. 前言

          大家好,我是安果!

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

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

          它們分別是:

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

          • 內(nèi)置 argparse 模塊

          • 內(nèi)置 getopt 模塊

          • 第三方依賴庫 click

          2. sys.argv

          構(gòu)建命令行參數(shù)最簡(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ù),即:腳本名稱「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

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

          3. argparse

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

          官方文檔:

          https://docs.python.org/zh-cn/3.10/library/argparse.html

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

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

          • 添加參數(shù)

          • 解析參數(shù)

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

          ...
          # 構(gòu)建一個(gè)命令行參數(shù)解析對(duì)象
          parser = argparse.ArgumentParser(description='命令行參數(shù)')
          ...
          3-2  添加命令行參數(shù)
          需要指出的是,--arg1 用于指定參數(shù)名稱,-a1 代表 dest 目標(biāo)變量值(簡(jiǎn)寫)
          ...
          # 設(shè)置3個(gè)參數(shù)
          # 參數(shù)1:arg1,整型,非必須傳入?yún)?shù)
          # 參數(shù)2:arg2,字符串,非必須傳入?yún)?shù),包含默認(rèn)值「xag」
          # 參數(shù)3:arg3,字符串類型,必須傳入的參數(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-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í)候,我們就可以通過「 -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

          4. getopt

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

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

          其中

          • args

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

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

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

            傳參使用方式:-n 23

          • longopts 長參數(shù)列表

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

            傳參使用方式:--port 8080

          這里以傳入數(shù)據(jù)庫連接參數(shù)為例(參數(shù)包含 ip、用戶名、密碼、數(shù)據(jù)庫名稱)進(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
          # 長參數(shù)
          # python3 4_getopt.py --ip 127.0.0.1 -u root -p 123456 -d mysqldb
          ip_pre = [item[1for item in opts if item[0in ('-i''--ip')]
          ip = ip_pre[0if len(ip_pre) > 0 else None
          print("參數(shù)ip:", ip)

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

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

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

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

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

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

          5. click

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

          項(xiàng)目地址:https://pypi.org/project/click/

          首先,我們需要安裝依賴庫 click

          import click

          # 安裝依賴
          # 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ù)上通過裝飾器配置參數(shù)即可

          比如,上面就定義了 3 個(gè)命令行參數(shù) arg1、arg2、arg3,并設(shè)置了參數(shù)的類型及默認(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ù)類型為整形,傳入的參數(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

          6. 最后

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

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

          我已經(jīng)將文中源碼上傳到后臺(tái),回復(fù)關(guān)鍵字「 args 」獲取所有源碼

          如果你覺得文章還不錯(cuò),請(qǐng)大家 點(diǎn)贊、分享、留言 下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!


          推薦閱讀


          最全總結(jié) | Android 系統(tǒng)抓包喂飯教程!

          最全總結(jié) | 聊聊 Python 數(shù)據(jù)處理全家桶(PgSQL篇)

          最全總結(jié) | 聊聊 Python 辦公自動(dòng)化之 PPT(下)

          最全總結(jié) | 聊聊 Python 辦公自動(dòng)化之 Word(下)

          最全總結(jié) | 聊聊 Python 辦公自動(dòng)化之 Excel(下)




          ??分享、點(diǎn)贊、在看,給個(gè)三連擊唄!
          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本AA黄色片网站 | 91丨豆花丨成人熟女 | 97青娱乐在线观看视频网站 | 亚洲首页欧美美女爱爱首页 | 午夜无码操逼逼 |