27
我一直在尋找這裏和一般的subparser例子的配額,但似乎無法想象這個看似簡單的東西了。如何正確使用argparse子分析器?
我有兩個var類型,其中一個有約束,所以認爲subparser是要走的路。例如-t允許「A」或「B」。如果用戶通過「A」,那麼他們還需要指定它是「a1」還是「a2」。如果他們只是通過「B」,那麼什麼都不是。
我能做到這一點,並有argparse返回我什麼類型的「A」通過或如果它只是「B」?
以下似乎工作,但由於某種原因在子分析後傳遞任何東西時會中斷。
例如從Linux終端
>> python test01.py -t A a1 -v 61
錯誤與...
usage: test01.py a1 [-h]
test01.py a1: error: unrecognized arguments: -v
希望這是有道理的。
代碼:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')
parser.add_argument("-t",
choices = ["A", "B"],
dest = "type",
required=True,
action='store',
help="Some help blah blah")
cam_parser = subparsers.add_parser('a1', help='Default')
cam_parser.set_defaults(which='a1')
cam_parser = subparsers.add_parser('a2', help='parse this instead of default')
cam_parser.set_defaults(which='a2')
parser.add_argument("-v",
nargs = '+',
required=True,
dest = "version",
type=int,
action='store',
help="some version help blah blah")
argument = parser.parse_args()
print argument.type
print argument.version
非常感謝你。然而,當我通過-v出於某種原因,即期望-v,並且當我通過它時,我仍然收到錯誤,我得到了我的舊錯誤「無法識別的參數」。即使我在立場爭議之前通過了它。有任何想法嗎?我一直在試圖找到一個類似的例子,但沒有多少運氣。 – user1571144
是'之前的參數,指定哪些子分析器參考輸入參數的用戶代碼或兩者? – Nickpick
它似乎正在執行'group1 = parser.add_subparsers(help ='subparser group 1')'和'group2 = parser.add_subparsers(help ='subparser group 2')'給出錯誤:不能有多個子分析器參數錯誤。我希望用它來分組子命令。 –