欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python 命令行之旅 —— 初探 argparse

系統(tǒng) 1651 0

Python 命令行之旅 —— 初探 argparse_第1張圖片


作者:HelloGitHub- Prodesire

HelloGitHub 的《講解開源項目》系列,項目地址:https://github.com/HelloGitHub-Team/Article

『講解開源項目系列』啟動——讓對開源項目感興趣的人不再畏懼、讓開源項目的發(fā)起者不再孤單。跟著我們的文章,你會發(fā)現(xiàn)編程的樂趣、使用和發(fā)現(xiàn)參與開源項目如此簡單。歡迎聯(lián)系我們給我們投稿,讓更多人愛上開源、貢獻開源~

前言

你是否好奇過在命令行中敲入一段命令后,它是如何被解析執(zhí)行的?是否考慮過由自己實現(xiàn)一個命令行工具,幫你執(zhí)行和處理任務?是否了解過陪伴在你身邊的 Python 有著豐富的庫,來幫你輕松打造命令行工具?

別著急,本文作為 Python 命令行之旅的第一篇將帶你逐步揭開命令行解析的面紗,介紹如何使用 Python 內(nèi)置的 argparse 標準庫解析命令行,并在后續(xù)的系列文章中介紹各具特色的第三方命令行庫,講講它們的異同,進而全面地體驗這次探索的旅程。

          
            本系列文章默認使用 Python 3 作為解釋器進行講解。
若你仍在使用 Python 2,請注意兩者之間語法和庫的使用差異哦~
          
        

介紹

argparse 作為 Python 內(nèi)置的標準庫,提供了較為簡單的方式來編寫命令行接口。當你在程序中定義需要哪些參數(shù), argparse 便會從 sys.argv 中獲取命令行輸入進行解析,對正確或非法輸入做出響應,也可以自動生成幫助信息和使用說明。

快速開始

設置解析器

第一步要做的就是設置解析器,后續(xù)對命令行的解析就依賴于這個解析器,它能夠?qū)⒚钚凶址D(zhuǎn)換為 Python 對象。
通過實例化 argparse.ArgumentParser ,給定一些選填參數(shù),我們就可以設置一個解析器:

          
            import argparse
parser = argparse.ArgumentParser(
    description='My Cmd Line Program',
)
          
        

定義參數(shù)

通過 ArgumentParser.add_argument 方法來為解析器設置參數(shù)信息,以告訴解析器命令行字符串中的哪些內(nèi)容應解析為哪些類型的 Python 對象,如:

          
            # 添加 nums 參數(shù),在使用信息中顯示為 num
# 其類型為 int,且支持輸入多個,且至少需要提供一個
parser.add_argument('nums',  metavar='num', type=int, nargs='+',
                    help='a num for the accumulator')
# 添加 --sum 參數(shù),該參數(shù)被 parser 解析后所對應的屬性名為 accumulate
# 若不提供 --sum,默認值為 max 函數(shù),否則為 sum 函數(shù)
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the nums (default: find the max)')
          
        

解析命令行

定義好參數(shù)后,就可以使用 ArgumenteParser.parse_args 方法來解析一組命令行參數(shù)字符串了。

默認情況下,參數(shù)取自 sys.argv[1:] ,它就是你在命令行敲入的一段命令(不含文件名)所對應的一個字符串列表。
比如,若你輸入 python3 cmd.py --sum 1 2 3 ,那么 sys.argsv[1:] 就是 ['--sum', '1', '2', '3']

當然,也可以通過 parse_args 入?yún)碇付ㄒ唤M命令行參數(shù)字符串:

          
            args = parser.parse_args(['--sum', '-1', '0', '1'])
print(args) # 結(jié)果:Namespace(accumulate=
            
              , nums=[-1, 0, 1])
            
          
        

業(yè)務邏輯

解析好命令行后,我們就可以從解析結(jié)果中獲取每個參數(shù)的值,進而根據(jù)自己的業(yè)務需求做進一步的處理。
比如,對于上文中所定義的 nums 參數(shù),我們可以通過解析后的結(jié)果中的 accumulate 方法對其進行求最大值或求和(取決于是否提供 --sum 參數(shù))。

          
            result = args.accumulate(args.nums)
print(result)  # 基于上文的 ['--sum', '-1', '0', '1'] 參數(shù),accumulate 為 sum 函數(shù),其結(jié)果為 0
          
        

代碼梳理

通過上文的講解,完成一個命令行工具的步驟是不是挺簡單易懂呢?我們將上文的代碼匯總下,以有一個更清晰的認識:

          
            # cmd.py
import argparse

# 1. 設置解析器
parser = argparse.ArgumentParser(
    description='My Cmd Line Program',
)

# 2. 定義參數(shù)
parser.add_argument('nums',  metavar='num', type=int, nargs='+',
                    help='a num for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the nums (default: find the max)')

# 3. 解析命令行
args = parser.parse_args()

# 4. 業(yè)務邏輯
result = args.accumulate(args.nums)
print(result)
          
        

若我們需要對一組數(shù)字求和,只需執(zhí)行:

          
            $ python3 cmd.py --sum -1 0 1
0
          
        

若我們需要對一組數(shù)字求最大值,只需執(zhí)行:

          
            $ python3 cmd.py -1 0 1
1
          
        

如果給定的參數(shù)不是數(shù)字,則會報錯提示:

          
            $ python3 cmd.py a b c
usage: cmd.py [-h] [--sum] num [num ...]
cmd.py: error: argument num: invalid int value: 'a'
          
        

我們還可以通過 -h --help 參數(shù)查看其自動生成的使用說明和幫助:

          
            usage: cmd.py [-h] [--sum] num [num ...]

My Cmd Line Program

positional arguments:
  num         a num for the accumulator

optional arguments:
  -h, --help  show this help message and exit
  --sum       sum the nums (default: find the max)
          
        

小結(jié)

怎么樣?揭開命令行工具的神秘面紗后,是不是發(fā)現(xiàn)它并沒有想象中的困難?反倒是感受到一種簡單而又強大的優(yōu)雅呢?

不過這還遠遠不是 argparse 的全部面貌。對于一些復雜的情況,比如各種類型參數(shù)、參數(shù)前綴、參數(shù)組、互斥選項、嵌套解析、自定義幫助等等,我們都還沒涉及探討。

在下一篇文章中,讓我們來一起深入了解 argparse ,感受它的魅力吧!

Python 命令行之旅 —— 初探 argparse_第2張圖片

關注公眾號加入交流群,一起討論有趣的技術話題


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲综合亚洲综合网成人 | 青草悠悠视频在线观看 | 亚洲国产中文字幕 | 91精品国产综合久久久动漫日韩 | 色综合 成人 | 日本在线播放不卡一区二区三区 | 色诱成人免费观看视频 | 国产精品免费观看 | 国产精品视频第一页 | 九九热在线视频免费观看 | 天天干天天干天天干天天干天天干 | 色网站视频 | 日本午夜影院 | 国产精品久久久久久久久久久搜索 | 五月婷婷婷婷 | av在线国产精品 | 国产一起色一起爱 | 欧美无遮挡一区二区三区 | 欧美一区二区三区在线观看视频 | 中国明星一级毛片免费 | 操操网 | 欧美精品一区二区三区蜜桃视频 | 青娱分类视频精品免费2 | 国产综合欧美 | 中文字幕亚洲欧美日韩在线不卡 | 免费av一区二区三区 | 欧美午夜一区二区三区免费大片 | 久久影院在线观看 | 久久精品 | 在线国产一区二区 | 午夜性刺激在线观看视频 | 精品免费国产一区二区三区四区介绍 | 国产精品单位女同事在线 | 奇米影视7777久久精品人人爽 | 不卡一区| 免费伊人网 | 91av国产在线| 欧美精品午夜 | 免费无码毛片一区二区A片 成人18网站 | 亚洲人免费视频 | 国产日韩视频 |