如何读取和处理命令行参数?

808 投票
22 回答
783178 浏览
提问于 2025-04-15 12:19

在Python中,我们怎么能找到给脚本提供的命令行参数,并对它们进行处理呢?


相关背景阅读:“sys.argv[1]”是什么意思?(什么是sys.argv,它来自哪里?)。如果想看一些更具体的例子,可以参考实现“[命令] [动作] [参数]”风格的命令行接口?我该如何使用Python的optparse格式化位置参数帮助信息?

22 个回答

134

我想给大家推荐一下 argparse,因为它比 optparse 更好,原因主要有以下几点:

(摘自链接)

  • argparse 模块可以处理位置参数和可选参数,而 optparse 只能处理可选参数。

  • argparse 对于命令行界面的样式没有严格要求,比如可以使用 -file 或 /file 这样的选项,也支持必需的选项。而 optparse 不支持这些功能,更注重纯粹性而不是实用性。

  • argparse 提供更详细的使用信息,包括根据你的参数生成的命令行使用说明,以及位置参数和可选参数的帮助信息。相对而言,optparse 需要你自己写使用说明,而且无法显示位置参数的帮助信息。

  • argparse 支持处理可变数量的命令行参数,而 optparse 则要求事先知道确切的参数数量(比如 1、2 或 3)。

  • argparse 支持将解析器分发到子命令,而 optparse 则需要手动设置 allow_interspersed_args 并进行解析器分发。

还有我个人最喜欢的一点:

  • argparse 允许在 add_argument() 中用简单的可调用对象来指定类型和动作参数,而 optparse 则需要修改类属性,比如 STORE_ACTIONSCHECK_METHODS 来实现正确的参数检查。
692
import sys

print("\n".join(sys.argv))

sys.argv 是一个列表,里面包含了所有在命令行中传递给脚本的参数。sys.argv[0] 是脚本的名称。

简单来说,

import sys

print(sys.argv[1:])
617

标准库中推荐的解决方案是 argparse文档):

这里有一个例子:

from argparse import ArgumentParser

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

args = parser.parse_args()

argparse 支持(还有其他功能):

  • 可以以任意顺序使用多个选项。
  • 支持短选项和长选项。
  • 可以设置默认值。
  • 可以生成使用帮助信息。

撰写回答