文章目錄
- argparse模塊介紹
- 基本用法
- add_argument()
argparse模塊介紹
argparse
模塊是 Python 標準庫中的一個用于編寫用戶友好的命令行接口(CLI)的模塊。它允許程序定義它所需要的命令行參數,然后 argparse
會自動從 sys.argv
解析出那些參數。argparse
自動生成幫助和使用手冊,并在用戶給程序傳入無效參數時報錯。
使用 argparse
可以讓你的程序更加靈活和易于使用,因為它允許用戶通過命令行參數來定制程序的行為,而不是硬編碼在程序中。這對于需要處理不同輸入數據或配置選項的腳本尤其有用。
基本用法
下面是如何創建一個基本的命令行接口的示例:
- 導入模塊:首先,需要導入
argparse
模塊。
import argparse
- 創建解析器:使用
ArgumentParser
類創建一個新的解析器對象。你可以指定程序的描述,這將在幫助信息中顯示。
parser = argparse.ArgumentParser(description='這是一個命令行工具的示例。')
- 添加參數:使用
add_argument()
方法定義程序接受的命令行參數。這個方法接受多個參數來指定如何解析命令行參數,下文將詳細介紹。
# 添加一個位置參數
parser.add_argument('input', help='輸入文件的路徑')# 添加一個可選參數,帶有一個短名稱和一個長名稱
parser.add_argument('-o', '--output', help='輸出文件的路徑', default='output.txt')# 添加一個開關參數
parser.add_argument('--verbose', action='store_true', help='增加輸出的詳細程度')
- 解析參數:使用
parse_args()
方法解析參數。這個方法會從sys.argv
中讀取參數,并根據之前定義的規則進行解析。
args = parser.parse_args()
- 使用參數:解析后的參數存儲在
args
對象中,你可以根據需要使用它們。
if args.verbose:print('詳細模式已開啟')print(f'輸入文件:{args.input}')
if hasattr(args, 'output'):print(f'輸出文件:{args.output}')
將以上代碼片段組合起來,我們得到一個完整的示例腳本:
import argparse# 創建解析器
parser = argparse.ArgumentParser(description='這是一個命令行工具的示例。')# 添加參數
parser.add_argument('input', help='輸入文件的路徑')
parser.add_argument('-o', '--output', help='輸出文件的路徑', default='output.txt')
parser.add_argument('--verbose', action='store_true', help='增加輸出的詳細程度')# 解析參數
args = parser.parse_args()# 使用參數
if args.verbose:print('詳細模式已開啟')print(f'輸入文件:{args.input}')
if hasattr(args, 'output'):print(f'輸出文件:{args.output}')
要運行這個腳本并傳入參數,你可以在命令行中這樣做:
python your_script.py example.txt -o result.txt --verbose
這將輸出:
詳細模式已開啟
輸入文件:example.txt
輸出文件:result.txt
ArgumentParser
類提供了豐富的功能來幫助你構建復雜的命令行接口,包括但不限于子命令解析、類型檢查、默認值設置等。
add_argument()
add_argument()
方法是 argparse
模塊中最核心的方法之一,用于向程序中添加命令行參數。這個方法非常靈活,允許你指定參數的名稱、類型、是否必需、默認值、幫助信息等。下面是對 add_argument()
方法中一些常用參數的詳細介紹:
name_or_flags
- 類型:字符串或字符串列表
- 描述:參數的名稱或一組名稱(也稱為標志)。如果是一個字符串,并且以
-
或--
開頭,那么它將被視為一個標志(flag)。如果是一個字符串列表,列表中的每個元素都將被視為一個單獨的標志,它們共享相同的參數值。 - 示例:
'--foo'
或['-f', '--foo']
action
- 類型:字符串或
argparse.Action
子類 - 描述:當解析到參數時,應該采取的基本動作類型。常見的動作包括
'store'
(存儲值)、'store_true'
(表示布爾值 True)、'store_false'
(表示布爾值 False)、'append'
(將值追加到列表中)等。也可以自定義動作類型。 - 示例:
'store_true'
nargs
- 類型:整數或
'*'
,'?'
,'+'
- 描述:命令行參數應該消耗的輸入數量。
'*'
表示消耗所有剩余的命令行參數,'?'
表示參數是可選的(并且最多只能有一個值),'+'
表示參數至少需要一個值。 - 示例:
'+'
const
- 類型:任意
- 描述:與
action
和nargs
一起使用時,const
提供了當參數不存在但需要一個默認值時的值。 - 示例:對于
'store_const'
或'append_const'
動作,const
指定了要存儲或追加的常量值。
default
- 類型:任意
- 描述:如果命令行中沒有提供該參數,則使用的默認值。
- 示例:
10
type
- 類型:可調用的(如函數、類型或
argparse.FileType
) - 描述:命令行參數應該被轉換成的類型。可以是 Python 的內置類型(如
int
、float
、str
),也可以是自定義的類型轉換函數。 - 示例:
int
choices
- 類型:容器
- 描述:參數允許的值的容器。如果命令行中的值不在此容器中,則拋出
argparse.ArgumentError
。 - 示例:
['yes', 'no', 'maybe']
required
- 類型:布爾值
- 描述:是否必須提供該命令行參數。
- 示例:
True
help
- 類型:字符串
- 描述:參數的簡短描述,用于生成幫助和使用手冊。
- 示例:
"Enable verbose mode"
metavar
- 類型:字符串
- 描述:在幫助消息中用于參數值的名稱。如果參數有多個值(如由
nargs
指定),則可以使用{0}
、{1}
等來指定每個值的名稱。 - 示例:
"FILE"
代碼示例
import argparseparser = argparse.ArgumentParser(description='Example of add_argument()')# 添加一個簡單的參數
parser.add_argument('--count', type=int, default=1, help='number of items')# 添加一個布爾參數
parser.add_argument('--verbose', action='store_true', help='increase output verbosity')# 添加一個具有多個值的參數
parser.add_argument('--files', nargs='+', type=argparse.FileType('r'), help='input files')# 解析命令行參數
args = parser.parse_args()# 使用參數
print(f"Count: {args.count}")
print(f"Verbose: {'on' if args.verbose else 'off'}")
for file in args.files:print(f"File: {file.name}")
在這個示例中,我們添加了三個參數:--count
是一個簡單的整數參數,--verbose
是一個布爾參數,--files
是一個接受多個文件路徑的參數。
世間文字八萬個,唯有一字最是能殺人:情字可誤人,情字可殺人。