如何解决当工具具有子命令时正确使用 argparse
我正在寻找一个简单的解决方案,在 Python 工具中包含 3 个“子命令”中的 2 个,每个都需要自己的标志(如果有)。
#!/usr/bin/python3
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='tester')
parser.add_argument('args',nargs='*')
argsDict = vars(parser.parse_args())
cmd = argsDict['args'][0]
if cmd == "simple":
# no flags required on
# test.py simple
print("cmd = %s"%cmd)
elif cmd == "complex":
# flags required on
# test.py complex
# require -l
parser.add_argument('args',nargs='*')
parser.add_argument('-l','--level',help='set complexity',required=True)
print("cmd = %s"%cmd)
argsDict = vars(parser.parse_args())
print(argsDict)
上面的代码反映了我当前的设置。 但是这会返回:
$ python ./test.py complex -l 4
usage: test.py [-h] [args [args ...]]
test.py: error: unrecognized arguments: -l 4
关于如何实现这一点的任何提示?
解决方法
#!/usr/bin/python3
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='tester')
#parser.add_argument('args',nargs='+')
subparsers = parser.add_subparsers(dest='cmd',help='sub-command help')
parser_simple = subparsers.add_parser('simple',help="this is the help for the simple subcommand")
parser_complex = subparsers.add_parser('complex',help="this is the help for the complex subcommand")
parser_complex.add_argument('-l','--level',help='set complexity',required=True)
argsDict = vars(parser.parse_args())
cmd = argsDict['cmd']
if cmd == "simple":
# no flags required on
# test.py simple
print("cmd = %s"%cmd)
elif cmd == "complex":
# flags required on
# test.py complex
# require -l
print("cmd = %s"%cmd)
print(argsDict)
else:
print("fail")
是按预期执行的更新代码示例。 非常感谢@jonrsharpe 的提示,我忽略了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。