You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本:如何用optparse/argparse让同一选项接收多参数?

解决optparse中同一选项接收多个参数的问题

嘿,这个坑我之前踩过!你现在用action="append"的话,optparse默认只会给每个-e绑定单个参数,所以输入python options.py -e hello world时,world会被当成独立的位置参数,根本没被-e捕获到,自然就只输出['hello']啦。

给你两种解决方案,按需选择:

方案1:允许多次使用-e,每次可传多个参数

如果想支持比如-e hello world -e foo bar这种多次调用选项的场景,只需要给add_option加上nargs='+'参数,它表示这个选项需要接收一个或多个参数:

from optparse import OptionParser
version_msg = ""
usage_msg = ""
parser = OptionParser(version=version_msg, usage=usage_msg)
# 添加nargs='+'让-e接收多个参数,action="append"保留多次添加的能力
parser.add_option("-e", "--echo", action="append", dest="input_lines", default=[], nargs='+')

# 解析参数
options, args = parser.parse_args()

# 因为每个-e的参数会被存为子列表,需要扁平化处理成一维列表
all_inputs = [item for sublist in options.input_lines for item in sublist]
print(all_inputs)

运行python options.py -e hello world会输出['hello', 'world'],运行python options.py -e hello world -e foo bar则输出['hello', 'world', 'foo', 'bar']。

方案2:单次-e接收所有参数(无需多次调用选项)

如果你只需要一次-e就能接收所有要回显的内容,把action改成"store"就行:

from optparse import OptionParser
version_msg = ""
usage_msg = ""
parser = OptionParser(version=version_msg, usage=usage_msg)
# action="store"直接存储参数列表,nargs='+'接收多个参数
parser.add_option("-e", "--echo", action="store", dest="input_lines", default=[], nargs='+')

options, args = parser.parse_args()
print(options.input_lines)

这样运行python options.py -e hello world直接输出['hello', 'world'],更简洁。

另外提一嘴:optparse是Python 2时代的老库了,现在Python 3官方推荐用argparse(功能更强大,支持更多参数场景),如果你的项目可以升级,不妨试试转用argparse哦~

内容的提问来源于stack exchange,提问作者Howard Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:59