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
from optparse import OptionParserparser = OptionParser()parser.add_option(opt_str, ..., attr=value, ...)(options, args) = parser.parse_args()options:屬性訪問對象,如 options.filenameargs:位置參數列表(非選項參數)| 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 | 調用自定義函數 | 複雜邏輯 | 動態驗證 |
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
parser.add_option("-q", action="store_false", dest="verbose", default=True)
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.2+ 標準庫推薦使用
argparse模塊,optparse已棄用但仍保留兼容。argparse支持子命令、類型驗證、互斥組等更強大功能,新項目請直接使用argparse。
本文參考:Python 官方文檔
本文出自 “平凡的日子” 博客,轉載請保留出處:原文鏈接