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号