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的特例,分别存储TrueFalse

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}")

  

 

posted @ 2025-09-03 09:10  北京测试菜鸟  阅读(19)  评论(0)    收藏  举报