在python argparse中为依赖于另一个可选参数的可选参数设置默认值。

问题描述 投票:0回答:1

我使用的是python argparse() 用于命令行解析。我想要这样的东西。

-a -> 可选参数

-b -> 可选参数,取决于 adefault value x

状况: -b 应设置(要么为 default 或自定义值),如果且仅如果 a 被设置,否则 b 应是 None.

谁能帮我实现这个功能?

python default argparse
1个回答
2
投票

@hpaulj'的注释仍然有效。最好是在解析完代码后,在代码中做这样的事情

但你可以用 @property 和你自己 MyNamespace 对象,而不是默认的argparse命名空间

@属性可以让你为一个特定类对象(在本例中是b)的getterssetters编写任意代码。

class MyNamespace(object):
    def __init__(self):
        self.a = None
        self._b = None   # this is a variable to store the actual value of -b

    @property
    def b(self):
        if self.a:
            return "A_IS_SET"
        else:
            return self._b or None
    @b.setter
    def b(self, input):
        self._b = input

def parse():
    parse.avalue = []
    parse.bvalue = []

    parser = argparse.ArgumentParser()
    parser.add_argument("-a")
    parser.add_argument("-b")

    out = parser.parse_args(namespace=MyNamespace())
    print out.a, out.b

if __name__ == "__main__":
    parse()
当a、b都通过时(顺序不限)。
$>python testparse.py -b BTEST -a atest
atest A_IS_SET
$>python testparse.py -a atest -b BTEST
atest A_IS_SET
当只通过-b时
$>python testparse.py -b BTEST 
None BTEST
当只通过-a时
$>python testparse.py -a atest
atest A_IS_SET
当他们都不通过时
$>python testparse.py
None None

希望对大家有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.