Eğer tanımlarsanız: Bununla
In [422]: parser=argparse.ArgumentParser()
In [423]: g=parser.add_mutually_exclusive_group()
In [424]: g.add_argument('--foo')
In [426]: g.add_argument('bar',nargs='*',default='test')
In [427]: parser.print_help()
usage: ipython2.7 [-h] [--foo FOO | bar [bar ...]]
positional arguments:
bar
optional arguments:
-h, --help show this help message and exit
--foo FOO
In [429]: parser.parse_args([])
Out[429]: Namespace(bar='test', foo=None)
In [430]: parser.parse_args(['one','two'])
Out[430]: Namespace(bar=['one', 'two'], foo=None)
In [431]: parser.parse_args(['--foo','two'])
Out[431]: Namespace(bar='test', foo='two')
Eğer etiketsiz değerlerin iki (gerçekten herhangi bir sayıda) veya --foo
ile işaretlenmiş bir değer belirtebilirsiniz. İkisini de denersem itiraz eder. Grubu required
olarak işaretleyebilirdim.
birkaç not: Ben default
ve const
hem belirtmedikçe
nargs='?'
olarak --foo
İşaretleme nispeten anlamsızdır.
Yalnızca özel grupta bir konum belirtebilirim ve bu argümanın '?' Olması gerekir. veya '*' ve bir 'varsayılan'. Başka bir deyişle, gerçekten isteğe bağlı olmalı.
Mutually_exclusive_group olmadan, her iki konum için de ?
yapabilirim, ancak 'sıfır veya iki argüman' diyemiyorum.
Yani, çözüm yok mu? –
2 konum veya bir bayraklı argümanı kabul etmek için, ancak ikisini birden değil? Çözüm, ayrıştırıcının her ikisini de kabul etmesine izin vermek ve daha sonra şikayet etmek için kendi kodunuzu yazmaktır. – hpaulj