一、什麼是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-hant/n/242432.html