我試圖做圖像之間的數學運算。我已經定義(簡化了我真正的代碼版本):Argparse:兩個位置參數與nargs ='+'
parser = argparse.ArgumentParser(description='Arithmetic operations on images')
parser.add_argument("input1", metavar='input1', action='store',
help='list of input images to operate with', nargs="+", type=str)
parser.add_argument("operation", metavar='operation', action='store', type=str,
help='type of operation (+,-,*,/) to be done', nargs=1)
parser.add_argument("input2",metavar='input2', action='store', nargs="+",
type=str, help='image (or value) with which to perform the operation on input1')
此代碼,生產:
arith.py -h
usage: arith.py [-h] input1 [input1 ...] operation input2 [input2 ...]
它確實是這樣理解的是輸入1可以包含一個或多個元素,操作將是一個單一的一個,而input2可以是任意數量的元素。
問題當然是,有兩個位置參數與未確定數量的元素,argparse混淆了什麼是什麼。我嘗試在'操作'中添加選項= [「+」,「 - 」,「*」,「/」],以便它知道在哪裏做分離,但似乎argparse無法做到。實際上,argparse文檔中,談到NARGS =「*」你可以閱讀:
需要注意的是,一般沒有太大的意義,有NARGS =不止一個位置參數「*」
我以爲我可以將args.input1,args.operation和args.input2加在一起,並將自己分開尋找「+」,「 - 」,「/」,「*」,但在做一件非常醜陋的事情之前,我會想想要挖掘集體思想。
我不確定''argparse'是否適合你在這裏做什麼。直接通過'sys.argv'可能會更容易。 – khelwood
嗨khelwood。實際上,我使用argparse解析sys.argv。這爲我提供了「免費」的幫助,它爲我完成了所有的檢查類型和現有變量。直接執行sys.argv就像我的解決方案,將input1,operation和input2集中到一起,然後分離出我自己。可行,但醜陋;)。不管怎麼說,還是要謝謝你! – Jblasco
'argparse'可以構造這樣的幫助信息,但這並不意味着它實際上可以按照你想要的方式解析參數。如果我叫'arith.py a b c d e f g',哪一個是'operation'?它可以是'b'到'f'中的任何一個。 'argparse'沒有任何內置的回溯模式匹配器;它只是以一種貪婪的方式處理從左到右的爭論。 – chepner