如何读取和处理命令行参数?
在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_ACTIONS
或CHECK_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
支持(还有其他功能):
- 可以以任意顺序使用多个选项。
- 支持短选项和长选项。
- 可以设置默认值。
- 可以生成使用帮助信息。