目前,我有以下代碼:設置單獨的選項爲參數使用Python
import argparse
parser = argparse.ArgumentParser(description='Adds a new modem to Iridium account')
parser.add_argument('imei', metavar='I', nargs=1, help='the modems IMEI')
parser.add_argument('-t1', '--type1', metavar='t1', nargs=1, choices=('email', 'directip', 'sbddevice'), default='directip', help='Call type (default: directip)')
parser.add_argument('-a1', '--address1', metavar='a1', nargs=1, default='75.101.138.217:9097', help='Call address (default: 75.101.138.217:9097)')
parser.add_argument('-t2', '--type2', metavar='t2', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a2', '--address2', metavar='a2', nargs=1, help='Call address')
parser.add_argument('-t3', '--type3', metavar='t3', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a3', '--address3', metavar='a3', nargs=1, help='Call address')
parser.add_argument('-t4', '--type4', metavar='t4', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a4', '--address4', metavar='a4', nargs=1, help='Call address')
parser.add_argument('-t5', '--type5', metavar='t5', nargs=1, choices=('email', 'directip', 'sbddevice'), help='Call type')
parser.add_argument('-a5', '--address5', metavar='a5', nargs=1, help='Call address')
args = parser.parse_args()
有沒有一種方法可以讓我所有的-t和-a結合成說-M1,-m2 ,-m3,-m4,-m5其中t是參數的第一個值,下面是相同的選擇,-a是第二個參數,但不限於與第一個值相同的選項?看起來你應該能夠做到這一點,否則你必須稍後再做一堆檢查,看看是否有t1和a1,因爲如果用戶提供了一個,他們需要提供另一個。
所以不是做-t1 email -a1 [email protected]
,你可以只是做-m1 email [email protected]
怎麼樣一個簡單的'-M1電子郵件:測試@ gmail.com'代替?我還不知道'argparse'足以說明它是多麼容易(如果可行),讓它爲一個選項吞噬兩個參數,但作爲用戶,我會對這種奇怪的解析行爲感到驚訝,而'type: wh @ tever'對我來說很自然。 – 2010-07-13 17:23:30
另外,對五個地址的限制看起來有點任意。也許你只是希望將地址作爲位置參數和IMEI作爲選項? – Philipp 2010-07-13 17:51:08
你可以讓它接受'nargs = 2'的兩個參數,然後解析輸出(你的'選擇='不會和那個一起工作)。但我想你是用'〜'方法去的。 – avacariu 2010-08-11 01:08:44