我使用的是python argparse()
用于命令行解析。我想要这样的东西。
-a
-> 可选参数
-b
-> 可选参数,取决于 a
与 default value x
状况: -b
应设置(要么为 default
或自定义值),如果且仅如果 a
被设置,否则 b
应是 None
.
谁能帮我实现这个功能?
@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
希望对大家有所帮助!