基本預期用途:如何有條件地讓蟒蛇的argparse模塊需要額外的參數
my_framework create Project_title /path/to/project
OR
my_framework create Project_title
(即用當前的工作目錄)
OR
my_framework update
(即更新my_framework而不是創建新項目)
我知道我可以做name
可選向其提供一個默認的,但是,在現實中name
是不提供可選用戶輸入create
作爲第一個參數。
我想出的最佳解決方案是使用name
的默認值,然後如果參數name
等於其默認值,則會拋出錯誤。但是,如果有一種方法可以爲我做這個工作,我寧願學會這樣做。
寫兩個腳本,my_framework_create
和my_framework_update
並不吸引我審美。
#!/usr/bin/env python
import argparse
import os
import shutil
from subprocess import call
template_path = "/usr/local/klibs/template"
parser = argparse.ArgumentParser("MY_FRAMEWORK CLI", description='Creates a new MY_FRAMEWORK project or updates MY_FRAMEWORK')
parser.add_argument('action', choices=['create', 'update'], type=str, help='<help text>')
parser.add_argument('name', type=str, help='<help text>')
parser.add_argument('path', default=os.getcwd(), nargs="?", type=str, help='<help text>')
args = parser.parse_args()
if args.action == "create":
# do the create stuff
if args.action == "update":
# do the update stuff
你想用subparsers此:https://docs.python.org/2/library/argparse.html#argparse.ArgumentParser.add_subparsers – Wolph
我不完全理解題。爲什麼使用update調用my_framework時不需要名稱?它不應該總是需要一個名字,以防用戶有兩個框架嗎? –
對不起; 'update'適用於'MY_FRAMEWORK'而不是用它創建的項目(即它基本上檢查github上的新版本,如果找到了它,則將其拉出)。 – Jonline