例如,使用GNU ls
可以使用--color[=WHEN]
選項控制着色。現在在這種情況下,等號是至關重要的,因爲ls
必須區分--color
的可選參數和位置參數(這是要列出的文件)。即ls --color
列出帶顏色的文件,與ls --color=always
相同,但ls --color always
將列出文件always
(以及顏色)。在argparse中使用GNU風格的長選項(不會混淆可選參數與位置)
現在從我看到的似乎接受使用--longopt <argument>
語法的長期選項的參數,這將導致無法使參數可選。也就是說,如果我嘗試實施myls
具有相同的行爲GNU ls
(這只是一個例子),我會遇到問題,因爲現在myls --color always
的含義一樣myls --color=always
(而不是要求--color
不用爭論和always
的位置參數)。
我知道我可以通過使用myls --color -- always
來規避這種情況,但沒有辦法在沒有該解決方法的情況下使其工作?這是告訴,--color
的參數必須以--color[=WHEN]
語法提供。
請注意,我不希望依賴--color
選件的有效參數數量有限的事實。這裏有一個例子我已經試過了沒有正常工作:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--foo",
action="store",
nargs="?")
parser.add_argument("frob",
action="store",
nargs=argparse.REMAINDER)
print(parser.parse_args(["alpha", "beta"]))
print(parser.parse_args(["--foo", "alpha", "beta"]))
print(parser.parse_args(["--foo=bar", "alpha", "beta"]))
隨着輸出:
Namespace(foo=None, frob=['alpha', 'beta'])
Namespace(foo='alpha', frob=['beta'])
Namespace(foo='bar', frob=['alpha', 'beta'])
注意到第二哪裏alpha
被解讀爲參數--foo
。我想:
Namespace(foo=None, frob=['alpha', 'beta'])
Namespace(foo=None, frob=['alpha', 'beta'])
Namespace(foo='bar', frob=['alpha', 'beta'])
是否可以通過添加兩個參數來解決?一個是「--color」,另一個是「--color = always」。我現在沒有可用的終端來測試。 –
我已經制定了一個需要對'argparse.py'進行小手術的補丁。 – hpaulj