我正在尝试创建一个小型命令行工具。我的方法是从我想要运行的命令列表开始,然后创建一个符合这些命令的解析器。而不是设置解析器,然后命令输入应该是什么。
我很难弄清楚如何根据以前的输入来设置参数。下面是我想要的命令的几个例子。
cgen create test-runner
cgen create config --branch branch_name
cgen create guide --branch branch_name目前,我已经设置了它,以便create将选项设置为参数。然后,根据输入的参数,如果运行config或Guided,我希望分支是必需的参数,但如果输入测试运行程序,则不需要。
我不断地拆掉东西,尝试不同的方法,所以我现在所拥有的是基本的,但是看起来是这样的……
def main():
def run_create(args):
print('run_create')
if args.create_type == 'test-runner':
create_test_runner(args)
if args.create_type == 'config':
print(f'Creating config')
if args.create_type == 'guide':
print(f'Creating guide')
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# create the parser for the "create" command
parser_create = subparsers.add_parser('create')
parser_create.add_argument(choices=['test-runner', 'config', 'guide'], dest='create_type')
parser_create.set_defaults(func=run_create)
args = parser.parse_args()
args.func(args)发布于 2022-03-23 11:03:04
在添加参数时,可以指定是否需要这些参数,或者不希望使用链接。
所以你可以试试看,并使一个论点是强制性的。
def arguments_is_given(*args: str) -> bool:
return len(set(args) & set(sys.argv)) > 0
def main():
def run_create(args):
print('run_create')
if args.create_type == 'test-runner':
create_test_runner(args)
if args.create_type == 'config':
print(f'Creating config')
if args.create_type == 'guide':
print(f'Creating guide')
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# create the parser for the "create" command
parser_create = subparsers.add_parser('create')
parser_create.add_argument("--branch",required=not arguments_is_given("config", "guide"))
parser_create.add_argument(choices=['test-runner', 'config', 'guide'], dest='create_type')
parser_create.set_defaults(func=run_create)
args = parser.parse_args()
args.func(args)https://stackoverflow.com/questions/71585367
复制相似问题