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
相关产品推荐
相关产品推荐

