gpt4 book ai didi

python - 使用 getopt/optparse 为一个选项处理多个值?

转载 作者:IT老高 更新时间:2023-10-28 22:21:02 25 4
gpt4 key购买 nike

是否可以使用 getopt 或 optparse 为一个选项获取多个值,如下例所示:

./hello_world -c arg1 arg2 arg3 -b arg4 arg5 arg6 arg7

请注意,每个选项(-c,-b)的实际值的数量可以是 1 或 100。我不想使用:./hello_world -c "arg1 arg2 arg3"-b "arg4 arg5 arg6 arg7"

在我看来这可能是不可能的(并且可能违反了 POSIX),如果我错了,请纠正我。

我已经看到了可以收集行尾所有非选项 (./hello_world -c arg1 -b arg1 arg2 arg3) 的示例......但不适用于多个选项中的第一个。

我希望我的应用能够在具有不同 Python 版本的各种平台上运行,所以我没有研究 argparser。

最佳答案

是的,可以通过 optparse 完成。

这是一个例子:

./test.py --categories=aaa --categories=bbb --categories ccc arg1 arg2 arg3

哪个打印:

arguments: ['arg1', 'arg2', 'arg3']
options: {'categories': ['aaa', 'bbb', 'ccc']}

下面的完整工作示例:

#!/usr/bin/env python

import os, sys
from optparse import OptionParser
from optparse import Option, OptionValueError

VERSION = '0.9.4'

class MultipleOption(Option):
ACTIONS = Option.ACTIONS + ("extend",)
STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)

def take_action(self, action, dest, opt, value, values, parser):
if action == "extend":
values.ensure_value(dest, []).append(value)
else:
Option.take_action(self, action, dest, opt, value, values, parser)


def main():
PROG = os.path.basename(os.path.splitext(__file__)[0])
long_commands = ('categories')
short_commands = {'cat':'categories'}
description = """Just a test"""
parser = OptionParser(option_class=MultipleOption,
usage='usage: %prog [OPTIONS] COMMAND [BLOG_FILE]',
version='%s %s' % (PROG, VERSION),
description=description)
parser.add_option('-c', '--categories',
action="extend", type="string",
dest='categories',
metavar='CATEGORIES',
help='comma separated list of post categories')

if len(sys.argv) == 1:
parser.parse_args(['--help'])

OPTIONS, args = parser.parse_args()
print "arguments:", args
print "options:", OPTIONS

if __name__ == '__main__':
main()

更多信息请访问 http://docs.python.org/library/optparse.html#adding-new-actions

关于python - 使用 getopt/optparse 为一个选项处理多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com