2
我試圖讓使用argparse比可以解析以下命令的解析器:常見的位置參數
python prog.py update <DOMAIN> <ENVIRONMENT>
python prog.py pull <DOMAIN> <ENVIRONMENT>
python prog.py release <DOMAIN> <ENVIRONMENT>
正如你所看到的,更新,拉和發佈採取相同的論點<DOMAIN>
和<ENVIRONMENT>
。
這三者都是主分析器的子分析器。
我寫了下面:
import argparse
# create the top-level parser
parser = argparse.ArgumentParser(prog='PROG', add_help=False)
parser.add_argument('domain', type=str, help='domain help')
parser.add_argument('environment', type=str, help='environment help')
#subparsers
subparsers = parser.add_subparsers(help='sub-command help', parents=[parser])
parser_pull = subparsers.add_parser('pull', help='pull help')
parser_update = subparsers.add_parser('update', help='update help')
print parser_pull.parse_args(['pull', 'WEBAPPS', 'DEV'])
print parser.parse_args(['update', 'WEBAPPS', 'DEV'])
但似乎域和環境預期的子命令之前更新,拉和發佈,所以它拋出一個錯誤。
如何在子命令後接受這些參數,而不需要在每個子命令中重複代碼?
爲了記錄,我使用Python 2.7。
我不認爲您可以在argparse中執行此操作。您是否嘗試過其他模塊,如[點擊](http://click.pocoo.org/5/),[optparse](https://docs.python.org/2/library/optparse.html)(警告,已棄用)或[docopt](http://docopt.org/)?我知道還有其他人,我不知道你想要什麼是可以實現的,但如果你向第三方圖書館開放,我相信你可以找到一個能夠做到這一點的人。 (我個人喜歡使用點擊,但就像我說過,我不知道它是否會爲你想要的工作) – Dannnno