Python命令行解析模块详解:getopt与argparse使用指南

叶初
叶初
发布时间:2026-10-13| 3人浏览过
原创

本文深入解析Python中两种主流命令行解析模块:getopt与argparse。详细阐述getopt.getopt()函数的参数定义、返回值结构及异常处理,并通过短长选项示例展示其用法。重点介绍argparse模块的三步构建法:创建ArgumentParser、添加add_argument参数及调用parse_args解析,涵盖构造函数与add_argument方法的完整参数列表,旨在帮助开发者编写用户友好的命令行工具。

本文重点探讨Python中用于处理命令行参数的解析模块,具体内容如下。

在Python中,常见的命令行解析器主要包含两种:getopt模块和argparse模块。接下来将分别对这两种解析器进行详细解读。

getopt模块

该模块主要用于协助脚本解析命令行参数,通常处理的是sys.argv[1:]部分。它遵循Unix系统中getopt()函数的约定,即使用-或--来指定命令参数。该模块提供了两个核心函数(getopt.getopt()和getopt.gnu_getopt())以及一个参数异常类(getopt.GetoptError)。

此处重点介绍getopt.getopt()函数。

函数原型为:getopt.getopt(args, options[, long_options])

该函数接收三个参数:

  • args:表示脚本需要解析的命令行参数列表;
  • options:指定命令行短选项。若某个短选项后需要跟随参数,则在该短选项后添加“:”,例如e:;
  • long_options:指定命令行长选项,此参数为可选。若长选项后需要跟随参数,则在该长选项后添加“=”,例如coding=;

若给定的命令行参数无法被正确解析,系统将抛出GetoptError异常。

该函数的返回值包含两个元素:

  • 第一个元素是一个由(option, value)组成的元组列表。其中option代表解析出的参数,value为该参数对应的值;
  • 第二个元素是脚本无需执行的参数列表,即那些未被解析的多余参数;

以下通过几个示例进行演示:

短选项示例:

>>> importgetopt
>>> args='-a -b -cfoo -d bar a1 a2'.split()
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1','a2']
>>> optlist, args= getopt.getopt(args,'abc:d:')
>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'),('-d', 'bar')]
>>> args
['a1', 'a2']

长选项示例:

>>> s='--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args= s.split()
>>> args
['--condition=foo', '--testing','--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args= getopt.getopt(args,'x', [
...   'condition=','output-file=','testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''),('--output-file', 'abc.def'), ('-x', '')]
>>> args
['a1', 'a2']

在脚本中的经典应用实例:

importgetopt,sys
 
defmain():
  try:
    opts, args = getopt.getopt(sys.argv[1:],"ho:v", ["help","output="])
  except getopt.GetoptErroras err:
    # print help information and exit:
    printstr(err) # will print something like "option -a not recognized"
    usage()
    sys.exit(2)
  output =None
  verbose =False
  for o, a in opts:
    if o =="-v":
      verbose =True
    elif o in ("-h","--help"):
      usage()
      sys.exit()
    elif o in ("-o","--output"):
      output = a
    else:
      assertFalse,"unhandled option"
  # ...
 
if __name__ =="__main__":
  main()

argparse模块

argparse模块使得构建用户友好的命令行接口变得非常简单。程序只需定义所需的参数,argparse将负责从sys.argv中解析这些参数。此外,该模块还会自动生成帮助和使用信息,并在用户传入非法参数时产生错误提示。 使用argparse模块通常包含三个步骤:

1. 创建解析器

使用argparse的第一步是实例化一个ArgumentParser对象:

>>> parser= argparse.ArgumentParser()

ArgumentParser对象会保存将命令行参数转换为Python数据类型所需的所有配置信息。

2. 添加参数

通过调用add_argument()方法向ArgumentParser添加程序的参数信息。通常,这些信息告知ArgumentParser如何接收命令行上的字符串并将其转换为对象。这些信息会被保存并在调用parse_args()时使用。例如:

>>> parser.add_argument('--name', help='username')
>>> parser.add_argument('--pass', help='password ')

随后,调用parse_args()返回的对象将包含name和pass两个属性,分别用于存储用户名与密码。

3. 解析参数

ArgumentParser通过parse_args()方法执行参数解析。它会检查命令行,将每个参数转换为适当的类型并采取相应的动作。在大多数情况下,这意味着从命令行解析出的属性会被构建为一个简单的Namespace对象。

>>> argments = parser.parse_args(['--name','li','--pass','si'])

在脚本中,parse_args() 调用通常不带参数,ArgumentParser 将根据sys.argv自动确定命令行参数。

ArgumentParser 对象

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter,prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)

创建一个新的argmentParserr对象。所有参数应以关键字参数形式传递。下文对每个参数进行详细描述,简要概括如下:

  • prog - 程序名称(默认值:sys.argv[0])
  • useage - 描述程序用法的字符串(默认值:由解析器的参数自动生成)
  • description - 参数帮助信息之前的文本(默认值:空字符串)
  • epilog- 参数帮助信息之后的文本(默认值:空字符串)
  • parents - 一个ArgumentParser对象列表,其包含的参数应被合并到当前解析器中
  • ormatter_class - 用于定制化帮助信息的类
  • prefix_chars - 可选参数的前缀字符集(默认值:‘-‘)
  • fromfile_prefix_chars - 额外参数读取文件的前缀字符集(默认值:None)
  • argument_default - 参数的全局默认值(默认值:None)
  • conflict_handler - 解决冲突的可选参数策略(通常无需设置)
  • add_help - 为解析器添加-h/–help 选项(默认值:True)

add_argument() 方法

ArgumentParser.add_argument(nameor flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])

定义如何解析一个命令行参数。以下对每个参数进行详细描述,简要概括如下:

  • name or flags- 选项字符串的名称或列表,例如foo 或者-f, --foo。
  • action - 在命令行遇到该参数时采取的基本动作类型。
  • nargs - 应读取的命令行参数数量。
  • const- 某些action和nargs选项所需的常数值。
  • default - 若命令行中未出现该参数时的默认值。
  • type- 命令行参数应被转换成的数据类型。
  • choices - 参数允许值的容器。
  • required - 该命令行选项是否可省略(仅针对可选参数)。
  • help - 参数的简短描述。
  • metavar - 参数在帮助信息中显示的名称。
  • dest - 给parse_args()返回的对象添加的属性名称。

总结

以上即为本文关于Python命令行解析模块详解的全部内容,希望能为读者提供帮助。感兴趣的朋友可继续查阅本站其他相关专题,如有不足之处,欢迎留言指正。感谢朋友们对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。