我正在嘗試使用模塊來解析命令行選項。Python argparse:可以被命名或位置的命令行參數
我想做一個可選的參數,可以是名稱或位置。例如,我想要myScript --username=batman
與myScript batman
做同樣的事情。我也想myScript
沒有用戶名是有效的。這可能嗎?如果是這樣,該怎麼辦?
我嘗試了類似於下面的代碼的各種東西沒有任何成功。
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-u", "--user-name", default="admin")
group.add_argument("user-name", default="admin")
args = parser.parse_args()
編輯:上面的代碼拋出異常說ValueError: mutually exclusive arguments must be optional
。
我在OS X 10.8.4上使用Python 2.7.2。
編輯:我嘗試了Gabriel Jacobsohn的建議,但是我無法在所有情況下都正常工作。
我嘗試這樣做:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-u", "--user-name", default="admin", nargs="?")
group.add_argument("user_name", default="admin", nargs="?")
args = parser.parse_args()
print(args)
和運行myScript batman
將打印Namespace(user_name='batman')
,但和myScript --user-name=batman
將打印Namespace(user_name='admin')
。
我試圖改變名稱user-name
到user_name
在第一add_argument
線,有時導致了命名空間或錯誤,都batman
和admin
取決於我如何運行該程序。
我試圖在第二add_argument
線更名user_name
到user-name
但會打印要麼Namespace(user-name='batman', user_name='admin')
或Namespace(user-name='admin', user_name='batman')
,這取決於我如何運行該程序。
我想提一下,我正在嘗試做的事情基本上與[Ack](http://beyondgrep.com/)對它的'--match'參數做的事情是一樣的。 –
請看看這個[問題](http://stackoverflow.com/questions/17707234/how-to-create-an-argument-that-is-optional/17707752#17707752) – twil
不知怎的,我沒有注意到這個問題, 。隨意將此問題標記爲該問題的重複。 –