首页 > 解决方案 > 使用 argparse 多个位置参数并使其中一个“可选”包含在输入中

问题描述

想法:我正在尝试编写一个程序,在使用命令行参数后它将参数发送到数据库。有 4 个参数- usernameemail和。除了应该是强制性的所有参数。addressversion username

到目前为止我完成了什么: 我的代码:

parser = argparse.ArgumentParser()

        parser.add_argument("-u", "--username", nargs = '?' , help="Insert your username", action="store_true")
        parser.add_argument("uName", help="Insert your username", type=str)
        parser.add_argument("-e", "--email", help="Insert your email", action="store_true")
        parser.add_argument("eMail", help="Insert your email", type=str)
        parser.add_argument("-a", "--address", help="Insert your address", action="store_true")
        parser.add_argument("address", help="Insert your address", type=str)
        parser.add_argument("-v", "--version", help="Insert your app version", action="store_true")
        parser.add_argument("ver", help="Insert your app version", type=str)

        args = parser.parse_args()

因此,如果我使用所有参数编写 cmd :

$python test.py -u tom -e tom@company.com -a 45xx -v 1.1

它给了我正确的输出。没问题。

现在,如果我写 cmd 留下一个参数:

$python test.py -u tom -e tom@company.com -a 45xx

它给了我错误:

usage: test.py [-h] [-u] [-e] [-b] [-a]
                          uName eMail aadress ver
test.py: error: the folowing arguments are required: ver

我理解它的方式是,在我的代码中,它们都是需要出现在输入中的位置参数,在我的情况下,所有“可选”参数都需要一个位置参数来保存输入。是否可以提出username输入中不需要的参数,因为在这种情况下我理解它的方式不是,如果这是真的,你能建议任何替代方法吗?我想也许有一种方法可以username给出“空”,如果它不在输入中,但我找不到办法做到这一点。

标签: argumentsargparse

解决方案


推荐阅读