1
我想要一個必要的命令行參數作爲位置參數或可選參數傳遞。例如,我想要從以下任何調用執行相同的操作:argparse:讓相同的必需參數爲位置或可選
prog 10
prog -10
prog -n 10
prog --num 10
這是可能的argparse?
我想要一個必要的命令行參數作爲位置參數或可選參數傳遞。例如,我想要從以下任何調用執行相同的操作:argparse:讓相同的必需參數爲位置或可選
prog 10
prog -10
prog -n 10
prog --num 10
這是可能的argparse?
隨着互斥組我可以創建一個合理的近似值:
在交互式會話:
In [10]: parser=argparse.ArgumentParser()
In [11]: grp=parser.add_mutually_exclusive_group(required=True)
In [12]: a=grp.add_argument('pos',nargs='?',type=int,default=0)
In [13]: b=grp.add_argument('-n','--num')
grp
可以包含任意數量的自選,和一個可選的位置。我爲位置選擇了一個不同的type
,這只是一個突出的區別。
只需將位置值:
In [14]: parser.parse_args(['10'])
Out[14]: Namespace(num=None, pos=10)
各種形式的可選的:
In [16]: parser.parse_args(['-n10'])
Out[16]: Namespace(num='10', pos=0)
In [17]: parser.parse_args(['--num=10'])
Out[17]: Namespace(num='10', pos=0)
In [18]: parser.parse_args(['--num','10'])
Out[18]: Namespace(num='10', pos=0)
測試組排他性
In [25]: parser.parse_args(['--num=20','10'])
usage: ipython3 [-h] [-n NUM] [pos]
ipython3: error: argument pos: not allowed with argument -n/--num
和組需要:
In [26]: parser.parse_args([])
usage: ipython3 [-h] [-n NUM] [pos]
ipython3: error: one of the arguments pos -n/--num is required
我嘗試給與位置相同的dest
作爲可選 - 因此兩者都會寫入num
。但是,這在其默認寫dest
導致的位置(如果需要的話,我可以添加詳細信息)
In [19]: a.dest
Out[19]: 'pos'
In [20]: a.dest='num'
In [21]: parser.parse_args(['--num','10'])
Out[21]: Namespace(num=0)
郵解析代碼將不得不處理在什麼都有意義的方式對args.pos
和args.num
值。
''-10
'的輸入是不可能處理的。好吧,我可以定義:
parser.add_argument('-1')
但結果可能不是你想要什麼:
總體的這個要求會使你的東西不必要的困難程序員。
感謝您的回答。我同意你關於'-10'形式的無用性。我在發佈時正在考慮UNIX的tail命令,但這是一個非常具體的用法,最後不值得額外編碼。我認爲按照你的建議使用了互斥組,但在我看來,這是一種繞開「argparse」哲學(我不太喜歡)的定義和可選參數之間明顯區別的方法。最後,如果我決定保留'argparse',我想我只會使用可選參數形式('-n','--num')。 – beppe