【发布时间】:2018-07-16 19:29:51
【问题描述】:
简介
我在学校项目上遇到了麻烦。我正在制作一个测试套件,我需要一个配置生成接口和一个测试运行器。为此,我使用了库 argparse 和两个子解析器 cgi 和 run
问题本身
所以这里是失败的代码部分:
def CGI(args):
print("CGI: Work In Progress")
exit(0)
def runTest(args):
print("Run: Work in Progress")
exit(0)
parser = argparse.ArgumentParser()
subparser = parser.add_subparsers()
cgi = subparser.add_parser("cgi", help="CSV Generator Interface")
run = subparser.add_parser("run", help="Test running")
verbosity = parser.add_argument_group("Verbosity").add_mutually_exclusive_group()
check = run.add_argument_group("Checks")
# Arguments
#Run parser
run.set_defaults(func=runTest)
# Run argument declaration ...
# Verbosity argument declaration ...
# Check argument declaration ...
#CGI
cgi.set_defaults(func=CGI)
args = parser.parse_args()
args.func(args) # Error is here
每当我运行此代码时,我都会遇到以下错误:
File "/home/thor/Projects/EPITA/TC/test/test.py", line 44, in main
args.func(args)
AttributeError: 'Namespace' object has no attribute 'func'
Python 版本
$ python -V
Python 3.6.4
Argparse 版本
$ pip show argparse
Name: argparse
Version: 1.4.0
Summary: Python command-line parsing library
Home-page: https://github.com/ThomasWaldmann/argparse/
Author: Thomas Waldmann
Author-email: tw@waldmann-edv.de
License: Python Software Foundation License
Location: /usr/lib/python3.6/site-packages
Requires:
编辑
如果我手动安装 argparse,它可以工作 sudo pip install argparse。但是有没有本地解决方案。我不确定它是否可以在学校的计算机上运行(我们不能安装软件包)
编辑 2
好吧,我的错,我是个彻头彻尾的白痴,我没有重写我的运行脚本,所以我忘了输入run 或cgi
感谢您阅读我的信息和您未来的帮助:)
【问题讨论】:
-
是的,没错。您了解了子解析器(包括它们的默认值)仅在其各自的命令出现在参数中时才运行的艰难方法。请注意,您可以回答自己的问题。
-
推荐的解决方案是
p1 = parser.add_subparsers(required=True, dest='cmd')见bugs.python.org/issue16308#msg350415
标签: python