Python內置模塊:optparse — 命令行選項的解析器詳解
什么是命令行參數解析?
在開發命令行工具時,經常需要處理用戶輸入的參數和選項。例如,在Linux系統中,ls -l /home命令中的-l就是一個選項,/home是一個位置參數。命令行參數解析就是將這些參數和選項提取出來,供程序使用的過程。
一. 基本使用方法
1.1 創建解析器和添加選項
from optparse import OptionParser
def main():
# 創建解析器實例
parser = OptionParser(usage="%prog [options] input_file output_file")
# 添加選項
parser.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False,
help="啟用詳細輸出模式")
parser.add_option("-f", "--file",
action="store", type="string", dest="filename",
help="指定輸入文件", metavar="FILE")
parser.add_option("-n", "--number",
action="store", type="int", dest="count",
help="指定數量", metavar="NUM")
# 解析參數
(options, args) = parser.parse_args()
# 使用解析結果
if options.verbose:
print("詳細模式已啟用")
if options.filename:
print(f"輸入文件: {options.filename}")
if options.count is not None:
print(f"數量: {options.count}")
if args:
print(f"位置參數: {args}")
if __name__ == "__main__":
main()
1.2 解析參數和獲取結果
parse_args()方法返回一個元組(options, args):
options:包含所有選項值的對象args:剩余的位置參數列表
2.選項動作(Actions)
2.1 store動作
最常用的動作,將選項參數存儲到指定目標。
from optparse import OptionParser
def demo_store_action():
parser = OptionParser()
# 基本store動作
parser.add_option("-f", "--file",
action="store", type="string", dest="filename")
# 測試解析
options, args = parser.parse_args(["-f", "test.txt"])
print(f"文件名:{options.filename}") # 輸出: 文件名: test.txt
2.2 store_const動作
存儲一個常量值,而不是從命令行讀取的值。
from optparse import OptionParser
def demo_store_const():
parser = OptionParser()
parser.add_option("--debug",
action="store_const", const=True, dest="debug_mode")
parser.add_option("--no-debug",
action="store_const", const=False, dest="debug_mode")
options, args = parser.parse_args(["--debug"])
print(f"調試模式:{options.debug_mode}") # 輸出: 調試模式: True
2.3 store_true和store_false動作
store_const的特例,分別存儲True和False。
from optparse import OptionParser
def demo_store_bool():
parser = OptionParser()
parser.add_option("-v", "--verbose",
action="store_true", dest="verbose")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose")
options, args = parser.parse_args(["-v"])
print(f"詳細模式:{options.verbose}") # 輸出: 詳細模式: True
2.4 append動作
將多個選項參數收集到列表中。
from optparse import OptionParser
def demo_append():
parser = OptionParser()
parser.add_option("-l", "--list",
action="append", dest="items")
options, args = parser.parse_args(["-l", "apple", "-l", "banana"])
print(f"物品列表:{options.items}") # 輸出: 物品列表: ['apple', 'banana']
4.5 count動作
統計選項出現的次數
from optparse import OptionParser
def demo_count():
parser = OptionParser()
parser.add_option("-v", "--verbose",
action="count", dest="verbosity")
options, args = parser.parse_args(["-v", "-v", "-v"])
print(f"詳細級別:{options.verbosity}") # 輸出: 詳細級別: 3
4.6 callback動作
最靈活的動作,允許自定義處理邏輯。
from optparse import OptionParser
def custom_callback(option, opt_str, value, parser):
print(f"選項:{opt_str}, 值:{value}")
setattr(parser.values, option.dest, value.upper())
def demo_callback():
parser = OptionParser()
parser.add_option("-c", "--custom",
action="callback", callback=custom_callback,
type="string", dest="custom_value")
options, args = parser.parse_args(["-c", "hello"])
print(f"處理后的值:{options.custom_value}") # 輸出: 處理后的值: HELLO
3. 選項類型(Types)
3.1 內置類型
optparse支持多種內置類型:
| 類型 | 描述 | 示例 |
| string | 字符串類型(默認) | "hello" |
| int | 整數類型 | 123 |
| float | 浮點數類型 | 3.14 |
| complex | 復數類型 | 1+2j |
| choice | 選擇限定值 | "high", "medium", "low" |
3.2 類型使用示例
from optparse import OptionParser
def demo_types():
parser = OptionParser()
# 整數類型
parser.add_option("-n", "--number",
action="store", type="int", dest="number")
# 浮點數類型
parser.add_option("-p", "--price",
action="store", type="float", dest="price")
# 選擇類型
parser.add_option("-l", "--level",
action="store", type="choice",
choices=["low", "medium", "high"], dest="level")
options, args = parser.parse_args([
"-n", "42",
"-p", "3.14",
"-l", "high"
])
print(f"數字:{options.number}, 類型:{type(options.number)}")
print(f"價格:{options.price}, 類型:{type(options.price)}")
print(f"級別:{options.level}")

浙公網安備 33010602011771號