使用argparse多个位置参数并使其中一个"可选"包含在输入中

时间:2018-06-14 15:27:07

标签: arguments argparse

想法:我试图编写一个程序,在使用命令行参数后,它会将参数发送到数据库。有4个参数 - usernameemailaddressversion 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给予" Null"如果它不在输入中但我无法找到方法。

0 个答案:

没有答案