首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Python optparse 模塊完整指南:命令行參數解析與幫助信息生成實戰

     編輯:關於C語言

Python 內建兩個處理命令行參數的模塊:getopt(簡單但功能受限)和 optparse(功能強大、自動生成幫助、符合 Unix 規範)。本文基於 Python 2 官方文檔,系統講解 optparse 核心用法、動作類型、默認值、幫助生成、分組等進階特性。

一、 快速上手:最小可用示例

#!/usr/bin/env python
from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename", help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="don't print status messages to stdout")

(options, args) = parser.parse_args()

支持的等效命令行調用

yourscript --file=outfile -q
yourscript -f outfile --quiet
yourscript --quiet --file outfile
yourscript -q -foutfile
yourscript -qfoutfile

自動生成幫助信息

$ yourscript -h
Usage: yourscript [options]
Options:
  -h, --help            show this help message and exit
  -f FILE, --file=FILE  write report to FILE
  -q, --quiet           don't print status messages to stdout

二、 核心工作流程

  1. 導入類:from optparse import OptionParser
  2. 創建解析器:parser = OptionParser()
  3. 定義選項:parser.add_option(opt_str, ..., attr=value, ...)
  4. 解析參數:(options, args) = parser.parse_args()
  • options:屬性訪問對象,如 options.filename
  • args:位置參數列表(非選項參數)

三、 選項動作類型詳解

Action行為典型用途示例
store (默認)保存參數值到 options 對象需值選項-f FILE
store_true遇到選項設 True開關標誌-v (verbose)
store_false遇到選項設 False關閉標誌-q (quiet)
store_const保存常量值固定值選項--debug-level=2
append追加值到列表可重複選項-m val1 -m val2
count計數出現次數疊加級別-v -v -v → 3
callback調用自定義函數複雜邏輯動態驗證

store 類型完整示例

parser.add_option("-f", "--file", action="store", type="string", dest="filename")
parser.add_option("-n", type="int", dest="num")  # 無長選項也可

args = ["-f", "foo.txt"]
(options, args) = parser.parse_args(args)
print(options.filename)  # 輸出: foo.txt

布爾開關組合

parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="verbose")  # 共用 dest
# -v 設 verbose=True, -q 設 verbose=False

四、 默認值設置

方法一:add_option 參數

parser.add_option("-q", action="store_false", dest="verbose", default=True)

方法二:set_defaults 批量設置

parser.set_defaults(verbose=True)
parser.add_option(...)
(options, args) = parser.parse_args()

五、 專業級幫助信息定制

usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)

parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=True,
                  help="make lots of noise [default]")
parser.add_option("-q", "--quiet", action="store_false", dest="verbose",
                  help="be vewwy quiet (I'm hunting wabbits)")
parser.add_option("-f", "--filename", metavar="FILE", help="write output to FILE")
parser.add_option("-m", "--mode", default="intermediate",
                  help="interaction mode: novice, intermediate, or expert [default: %default]")

輸出效果

Usage: yourscript [options] arg1 arg2
Options:
  -h, --help            show this help message and exit
  -v, --verbose         make lots of noise [default]
  -q, --quiet           be vewwy quiet (I'm hunting wabbits)
  -f FILE, --filename=FILE  write output to FILE
  -m MODE, --mode=MODE  interaction mode: novice, intermediate, or expert [default: intermediate]

關鍵點

  • %prog 自動替換為腳本名 (os.path.basename(sys.argv[0]))
  • metavar 顯示為大寫,提示參數形式(如 FILE、MODE)
  • %default 自動插入該選項默認值
  • 幫助文本自動換行,無需手動處理

六、 選項分組

# 危險選項組
group = OptionGroup(parser, "Dangerous Options",
    "Caution: use these options at your own risk. It is believed that some of them bite.")
group.add_option("-g", action="store_true", help="Group option.")
parser.add_option_group(group)

# 調試選項組
group = OptionGroup(parser, "Debug Options")
group.add_option("-d", "--debug", action="store_true", help="Print debug information")
group.add_option("-s", "--sql", action="store_true", help="Print all SQL statements executed")
group.add_option("-e", action="store_true", help="Print every action done")
parser.add_option_group(group)

分組輸出效果

...
Dangerous Options:
  Caution: use these options at your own risk. It is believed that some of them bite.
  -g                  Group option.

Debug Options:
  -d, --debug         Print debug information
  -s, --sql           Print all SQL statements executed
  -e                  Print every action done

七、 完整實戰腳本模板

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from optparse import OptionParser, OptionGroup

def main():
    usage = "usage: %prog [options] input_file [output_file]"
    parser = OptionParser(usage=usage, version="%prog 1.0")
    
    # 基礎選項
    parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False,
                      help="Enable verbose output")
    parser.add_option("-o", "--output", dest="output", metavar="FILE",
                      help="Write result to FILE")
    parser.add_option("-n", "--count", type="int", dest="count", default=1,
                      help="Processing count [default: %default]")
    
    # 高級選項組
    advanced = OptionGroup(parser, "Advanced Options")
    advanced.add_option("--force", action="store_true", help="Overwrite existing files")
    advanced.add_option("--dry-run", action="store_true", help="Simulate without changes")
    parser.add_option_group(advanced)
    
    (options, args) = parser.parse_args()
    
    if not args:
        parser.error("Input file required")
    
    print(f"Processing {args[0]} with count={options.count}")
    if options.verbose:
        print("Verbose mode enabled")

if __name__ == "__main__":
    main()

八、 遷移提示:Python 3 使用 argparse

注意:Python 3.2+ 標準庫推薦使用 argparse 模塊,optparse 已棄用但仍保留兼容。argparse 支持子命令、類型驗證、互斥組等更強大功能,新項目請直接使用 argparse。


本文參考:Python 官方文檔

本文出自 “平凡的日子” 博客,轉載請保留出處:原文鏈接

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved