Комментарий
@hpaulj
остается в силе. Лучше всего это делать в коде после анализа
Но вы можете сделать это с @property
и вашим собственным MyNamespace
объектом вместо пространства имен argparse по умолчанию
@property позволяет вам писать произвольный код для методов получения / установки определенного объекта класса (в данном случае b)
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
Надеюсь, это поможет!