【问题标题】:Argparse Positional arguments inside an Optional argument可选参数中的 Argparse 位置参数
【发布时间】:2023-04-02 18:28:01
【问题描述】:
我想要以下带有 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 必须是它的位置。
什么是正确的代码? (我对文档感到很困惑,非常感谢)
【问题讨论】:
标签:
python
mysql
command-line-interface
command-line-arguments
argparse
【解决方案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)
您不需要拥有-h。 argparse 为您服务,无需额外费用。
c 和 u 是可选的,password、db_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'])