Python argparse可選參數,讓你的CLI工具更加靈活

一、什麼是argparse

argparse是Python標準庫中用於解析命令行參數和選項的模塊。使用argparse,開發者可以方便的編寫命令行工具,使其具有多種可選參數和選項,從而方便用戶輸入指定的命令,程序也可以更好的適應複雜的應用場景。argparse不僅簡單易用,還可以針對不同的應用場景進行高級用法的擴展。

二、argparse的基本使用

使用argparse,首先要創建一個ArgumentParser對象,然後調用add_argument()方法添加參數和選項。下面是一個簡單的例子:

import argparse
 
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))

在上面的例子中,我們首先定義了一個ArgumentParser對象parser,並指定了一個描述信息description。然後,我們使用add_argument()方法分別添加了一個位置參數N和一個可選項–sum。其中,metavar指定了參數的名稱,type指定了參數的類型,nargs指定了參數的數量(表示我們想要接收多少個int類型的參數)。對於可選項,我們需要使用dest和action參數。dest指定了參數對應的名稱,action表示這個參數是一個開關(store_true或store_false),還是保存一個常量或函數(store_const),等等。最後,我們使用parse_args()方法來解析參數,並返回一個命名空間對象args,包含了所有的參數和選項。我們可以通過屬性的方式訪問args中的具體參數,並將其傳遞給函數accumulate()。

三、argparse的高級用法

1. 互斥參數

有些情況下,我們需要讓某些參數或選項互斥。在argparse中,我們可以使用add_mutually_exclusive_group()方法創建一個互斥組,把一些參數或選項添加到組中。例如:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true')
group.add_argument('--bar', action='store_true')
args = parser.parse_args()

if args.foo:
    print('Foo')
elif args.bar:
    print('Bar')

在上面的例子中,我們創建了一個互斥組group,並向其中添加了兩個選項–foo和–bar。當用戶指定了–foo時,程序將列印’Foo’;當用戶指定了–bar時,程序將列印’Bar’。

2. 子命令

有時候,我們需要實現一個CLI工具,可以執行多個任務,每個任務有自己的參數和選項。在argparse中,我們可以使用add_subparsers()方法實現子命令。例如:

import argparse
 
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

# 創建子命令parser1
parser1 = subparsers.add_parser('command1')
parser1.add_argument('--foo')

# 創建子命令parser2
parser2 = subparsers.add_parser('command2')
parser2.add_argument('--bar')

args = parser.parse_args()

if args.command == 'command1':
    print(args.foo)
elif args.command == 'command2':
    print(args.bar)

在上面的例子中,我們首先創建了一個ArgumentParser對象parser,並使用add_subparsers()方法創建了一個子命令subparsers。然後,我們使用add_parser()方法創建了兩個子命令parser1和parser2,並向每個parser添加了自己的參數和選項。最後,我們使用parse_args()方法解析參數,並判斷用戶指定的是哪個子命令。

3. 自定義類型

在argparse中,默認支持常見的數據類型(int、float、str等),但有時候我們需要自定義類型。例如,我們想要接受一個日期字元串,並將其轉換成datetime類型。在這種情況下,我們可以使用type參數實現:

import argparse
from datetime import datetime

def datestr(date_string):
    return datetime.strptime(date_string, "%Y-%m-%d")

parser = argparse.ArgumentParser()
parser.add_argument('start_date', type=datestr)
args = parser.parse_args()

print(args.start_date)

在上面的例子中,我們定義了一個datestr函數,將日期字元串轉換成datetime類型。然後,我們使用type參數將datestr函數指定為參數的類型。當用戶指定參數時,argparse會首先調用datestr函數,將用戶輸入的字元串轉換成datetime類型。如果轉換失敗,argparse會拋出異常。

四、總結

argparse是Python標準庫中一個非常強大和靈活的工具,可以幫助我們編寫出更加易用和可擴展的命令行工具。它不僅支持常見的參數和選項,還可以實現互斥參數、子命令、自定義類型等高級用法。在實際的開發中,掌握argparse有助於我們更加快速高效地開發和維護CLI工具。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242432.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:48
下一篇 2024-12-12 12:48

相關推薦

發表回復

登錄後才能評論