命令行參數,我想我的Python程序來解析命令喜歡這樣的論點:解析與argparse
python dosomething.py z a1 b1 a2 b2 ...
在那裏我可以有任意數量#B#對和Z是一個不相關的數字。如有必要,我可以指定a和b對的數量。我正在使用argparse。
命令行參數,我想我的Python程序來解析命令喜歡這樣的論點:解析與argparse
python dosomething.py z a1 b1 a2 b2 ...
在那裏我可以有任意數量#B#對和Z是一個不相關的數字。如有必要,我可以指定a和b對的數量。我正在使用argparse。
您需要爲這種專門行爲定義custom action。
import sys
import argparse
class AbsAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
if len(values) % 2 == 0:
# If valid, store the values.
setattr(namespace, self.dest, values)
# You could convert the flat list to a list of 2-tuples, if needed:
# zip(values[::2], values[1::2])
else:
# Otherwise, invoke a parser error with a message.
parser.error('abs must be supplied as pairs')
ap = argparse.ArgumentParser()
ap.add_argument('z')
ap.add_argument('abs', nargs = '+', action = AbsAction)
opt = ap.parse_args()
print opt
謝謝,我用一個小小的黑客來解析'a''b'組合,現在錯誤得到妥善處理。 – deltap
import sys
def main(args):
print args[0]
print len(args)
print [arg for arg in args]
if __name__ == '__main__':
main(sys.argv)
謝謝你的建議,如果可能,我想堅持使用argparse。 – deltap
我想你可以讀取的z,並把它弄出來的方式,然後讀取的參數,以便休息(http://stackoverflow.com/questions/9027028/argparse-argument-order)和錯誤出如果他們的人數是奇數。 – approxiblue
你應該可以使用''nargs ='+'''讀取其餘的內容,然後可以使用自定義操作來檢查偶數對。並作爲@deshko提到的第一個位置參數可以指定爲z與''nargs = 1'' 檢查http://stackoverflow.com/questions/13174975/argparse-doesnt-check-for-positional-arguments爲關於nargs的選擇 – goofd