可选参数中的 Argparse 位置参数

Posted

技术标签:

【中文标题】可选参数中的 Argparse 位置参数【英文标题】:Argparse Positional arguments inside an Optional argument 【发布时间】:2020-11-08 01:28:28 【问题描述】:

我想要以下带有 argparse 的结构:

usage: ms1.py [-h] [-c] [-u] [password] [DB_name]

optional arguments:
  -h, --help            show this help message and exit
  -c, --c               show available items
  -u password DB_name,  Update database

我希望将 -h -c -u 全部设为可选。 但是如果 -u 是由用户声明的 - 密码和 DB_name 必须是它的位置。

什么是正确的代码? (我对文档感到很困惑,非常感谢)

【问题讨论】:

你能展示你的代码吗? 【参考方案1】:

这样的东西应该适合你:

from argparse import ArgumentParser

p = ArgumentParser()
p.add_argument('--c', required=False)
p.add_argument('--u', required=False)
p.add_argument('password')
p.add_argument('db_name')
args = p.parse_args()
print(args)

您不需要拥有-hargparse 为您服务,无需额外费用。

cu 是可选的,passworddb_name 是必需的,并且位置很重要。

【讨论】:

【参考方案2】:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-c', action='store_true', help='show available items')
parser.add_argument('-u', nargs=2, metavar=('password', 'DB_name'), help='Update database')
args = parser.parse_args()
print(args)

样本:

1442:~/mypy$ python3 stack62967549.py -h
usage: stack62967549.py [-h] [-c] [-u password DB_name]

optional arguments:
  -h, --help           show this help message and exit
  -c                   show available items
  -u password DB_name  Update database
1442:~/mypy$ python3 stack62967549.py -c
Namespace(c=True, u=None)
1443:~/mypy$ python3 stack62967549.py -u foobar FOO
Namespace(c=False, u=['foobar', 'FOO'])

【讨论】:

以上是关于可选参数中的 Argparse 位置参数的主要内容,如果未能解决你的问题,请参考以下文章

argparse 可选位置参数?

Argparse - 子解析器中位置参数之前的可选参数

如何让 argparse 识别跟随可变长度可选参数的位置参数?

帮助文本中的 Python argparse 参数顺序

python argparse详解

Argparse:“可选参数”下列出的必需参数?