【发布时间】:2020-10-13 12:19:06
【问题描述】:
我正在尝试将 argparse 库与 python2 一起使用,但它总是报错:
代码:
parent_parser = argparse.ArgumentParser()
sub_parsers = parent_parser.add_subparsers(title = "actions")
parser_create = sub_parsers.add_parser("create", parents = [parent_parser], add_help = False, description = "Create new Customer account.", help = "create")
parser_create.add_argument('-p', '--password', help = 'User Password', required = True)
parser_create.add_argument('-n', '--fullname', nargs = 2, help = 'User Full Name', required = True)
parser_create.add_argument('-e', '--email', required = True, help = "User Email address")
parser_deactivate = sub_parsers.add_parser("deactivate", parents = [parent_parser], add_help = False, description = "Deactivate existing customer account.", help = "deactivate.")
parser_deactivate.add_argument('-e','--email', required = True, help = "User Email address")
args = parent_parser.parse_args()
输出:
[root@localhost ~]# python2 create-user.py deactivate -e o@x.com
usage: create-user.py deactivate [-h] -e EMAIL {create,deactivate} ...
create-user.py deactivate: error: too few arguments
使用create 而不是deactivate 时出现同样的错误。
它在 python3.x 中也能正常工作。
【问题讨论】:
-
为什么要将
parent_parser作为父级添加到子解析器?只需删除它。 -
python2 create-user.py -h给出什么输出?生成的在线帮助应该显示 argparse 的预期 -
@无用用法:test.py create [-h] -p PASSWORD -f FULLNAME FULLNAME -e EMAIL {create,deactivate} ... 可选参数:-h, --help 显示此帮助消息并退出 -p PASSWORD, --password PASSWORD 用户密码 -f FULLNAME FULLNAME, --fullname FULLNAME FULLNAME 用户全名 -e EMAIL, --email EMAIL 用户电子邮件地址操作:{create,deactivate} create 创建新客户帐户deactivate 停用新客户帐户。
-
在 py2 中需要子解析器,在 py3 中不需要(默认情况下)。所以 parent_parser 的递归使用不会给 py3 带来问题,但确实使 py2 成为不可能。删除
parents位。 -
该信息应该在问题中,在哪里清晰易读。
标签: python python-3.x python-2.7 argparse python-2.x