arguments - 使用 argparse 多个位置参数并使其中一个“可选”包含在输入中
问题描述
想法:我正在尝试编写一个程序,在使用命令行参数后它将参数发送到数据库。有 4 个参数- username
、email
和。除了应该是强制性的所有参数。address
version
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
给出“空”,如果它不在输入中,但我找不到办法做到这一点。
解决方案
推荐阅读
- typescript - 为什么将 RxJS 升级到 v6.3 后 map 不起作用
- php - 使用 Codeigniter 中的路由到达两个控制器之一
- flask - Request.files 400 烧瓶中的错误请求
- regex - 正则表达式查找匹配 3 个术语的任意组合
- java - 将 Spring Boot jar 名称传递给 Gradle Groovy 脚本
- java - Java DES 加密,C# DES 解密
- java - 使用 akka HTTP 调用多个 API
- java - jlink --module-path 是有序路径吗?
- javascript - 使用 Fetch API 时出现 CORS 问题
- typescript - 亚马逊AWS | 使用 DynamoDB 导致“错误类型错误:无法将未定义或空值转换为对象”