gpt4 book ai didi

python - 使用 argparse 调用不同的函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:54 27 4
gpt4 key购买 nike

我是 Argparse 模块的新手。我几乎完成了我的剧本,但有些事情我找不到办法去做。

这是脚本:

import argparse

def function1(a, b, c):
#mystaff
def function2(e, f):
#mystaff
def function3(g):
#mystaff

if __name__ == '__main__':

parser = argparse.ArgumentParser(description='blahblah')
parser.add_argument('-a','--a', help='blahblah', required=False, default="defaultvalue")
parser.add_argument('-b','--b', help='blahblah', required=False)
.......

args = parser.parse_args()
function1(args.a,args.b,args.c)

我想从命令提示符调用脚本。现在,我可以使用它来调用 function1 : python myscript.py -a <var>

我想要的是:

python myscript.py -a <var> : 按现在的样子调用 function1

python myscript.py function2 -c <var> : 只调用函数2

python myscript.py function3 -g <var> : 只调用函数3

因此,如果我不指定函数,则 function1 是默认值,否则我也必须从命令提示符中传递函数名称。有什么想法吗?

最佳答案

默认子命令

如果你想要有子命令,并且在没有指定子命令的情况下将其中一个设置为默认值,那么你就不能使用典型的子解析器方法。

您需要分两次执行 argparse:

parser = ArgumentParser()
parser.add_argument("function",
nargs="?",
choices=['function1', 'function2', 'function2'],
default='function1',
)
args, sub_args = parser.parse_known_args()

if args.function == "function1":
parser = ArgumentParser()
parser.add_argument('-a','--a')
parser.add_argument('-b','--b')
parser.add_argument('-c','--c')
args = parser.parse_args(sub_args)
function1(args.a, args.b, args.c)
elif args.function == "function2":
...
elif args.function == "function3":
...

处理--help

如果你想让 --help 选项有用,你需要做更多的工作:

  • 我们需要手动处理帮助,因为有时我们需要整体帮助,有时我们需要子命令的帮助
  • 我们不能直接给出默认的子命令,因为我们需要能够判断它是否被指定

这应该可以解决问题:

# Parse the subcommand argument first
parser = ArgumentParser(add_help=False)
parser.add_argument("function",
nargs="?",
choices=['function1', 'function2', 'function2'],
)
parser.add_argument('--help', action='store_true')
args, sub_args = parser.parse_known_args(['--help'])

# Manually handle help
if args.help:
# If no subcommand was specified, give general help
if args.function is None:
print parser.format_help()
sys.exit(1)
# Otherwise pass the help option on to the subcommand
sub_args.append('--help')

# Manually handle the default for "function"
function = "function1" if args.function is None else args.function

# Parse the remaining args as per the selected subcommand
parser = ArgumentParser(prog="%s %s" % (os.path.basename(sys.argv[0]), function))
if function == "function1":
parser.add_argument('-a','--a')
parser.add_argument('-b','--b')
parser.add_argument('-c','--c')
args = parser.parse_args(sub_args)
function1(args.a, args.b, args.c)
elif function == "function2":
...
elif function == "function3":
...

关于python - 使用 argparse 调用不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24584784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com