解析Python中的空选项

dir*_*ion 4 python optparse optionparser

我有一个应用程序,允许您将事件数据发送到自定义脚本.您只需布置命令行参数并分配哪些事件数据与哪个参数相关.问题是这里没有真正的灵活性.您将映射的每个选项都将被使用,但并非每个选项都必须包含数据.因此,当应用程序构建要发送到脚本的字符串时,某些参数为空,并且python的OptionParser错误输出"error: - someomegument option需要参数"

因为有超过200个数据点,所以我不能编写单独的脚本来处理可能的参数的每个组合(它需要2 ^ 200个脚本).有没有办法在python的optionparser中处理空参数?

Mar*_*ddy 8

对不起,我的第一个答案误解了这个问题.您可以在定义选项时完成使命令行标志的可选参数使用回调操作类型的功能.使用以下函数作为回调(您可能希望根据您的需要定制)并为每个可以选择接收参数的标志配置它:

import optparse

def optional_arg(arg_default):
    def func(option,opt_str,value,parser):
        if parser.rargs and not parser.rargs[0].startswith('-'):
            val=parser.rargs[0]
            parser.rargs.pop(0)
        else:
            val=arg_default
        setattr(parser.values,option.dest,val)
    return func

def main(args):
    parser=optparse.OptionParser()
    parser.add_option('--foo',action='callback',callback=optional_arg('empty'),dest='foo')
    parser.add_option('--file',action='store_true',default=False)
    return parser.parse_args(args)

if __name__=='__main__':
    import sys
    print main(sys.argv)
Run Code Online (Sandbox Code Playgroud)



从命令行运行,您将看到:

# python parser.py
(<Values at 0x8e42d8: {'foo': None, 'file': False}>, [])

# python parser.py --foo
(<Values at 0x8e42d8: {'foo': 'empty', 'file': False}>, [])

# python parser.py --foo bar
(<Values at 0x8e42d8: {'foo': 'bar', 'file': False}>, [])
Run Code Online (Sandbox Code Playgroud)