Python argparse required=True 但 --version 功能?

Posted

技术标签:

【中文标题】Python argparse required=True 但 --version 功能?【英文标题】:Python argparse required=True but --version functionality? 【发布时间】:2012-08-20 20:30:05 【问题描述】:

在我的所有脚本中,我使用标准标志 --help--version,但是我似乎无法弄清楚如何使用 parser.add_argument(..., required=True) 制作 --version

import sys, os, argparse

parser = argparse.ArgumentParser(description='How to get --version to work?')

parser.add_argument('--version', action='store_true', 
                    help='print version information')
parser.add_argument('-H', '--hostname', dest='hostname', required=True, 
                    help='Host name, IP Address')
parser.add_argument('-d', '--database', dest='database', required=True,
                    help='Check database with indicated name')
parser.add_argument('-u', '--username', dest='username', required=True, 
                    help='connect using the indicated username')
parser.add_argument('-p', '--password', dest='password', required=True, 
                    help='use the password to authenticate the connection')

args = parser.parse_args()

if args.version == True:
    print 'Version information here'

$ ./arg.py  --version 
usage: arg.py [-h] [--version] -H HOSTNAME -d DATABASE -u USERNAME -p PASSWORD 
arg.py: error: argument -H/--hostname is required

是的,我希望--hostname和其他是必需的,但我总是希望--version 能够像--help(和-h)一样正常工作。

$ ./arg.py  --help   
usage: arg.py [-h] [--version] -H HOSTNAME -d DATABASE -u USERNAME -p PASSWORD

How to get --version to work?

optional arguments:
  -h, --help            show this help message and exit
  --version             print version information
  -H HOSTNAME, --hostname HOSTNAME
                        Host name, IP Address
  -d DATABASE, --database DATABASE
                        Check database with indicated name
  -u USERNAME, --username USERNAME
                        connect using the indicated username
  -p PASSWORD, --password PASSWORD
                        use the password to authenticate the connection

对让--version 工作有任何帮助吗?

【问题讨论】:

应该是(以避免关键错误:) if 'version' in args: print 'Version information here' 【参考方案1】:

add_argument 有一个特殊的版本 action 关键字参数(如此处所述:argparse#action)。 试试这个(从工作代码复制):

parser.add_argument('-V', '--version', 
                    action='version',                    
                    version='%(prog)s (version 0.1)')

【讨论】:

如docs.python.org/library/argparse.html#action 中所述,+1。请注意,这正是 OP 所要求的;当有required=True 参数时,一种使--version 参数起作用的方法。

以上是关于Python argparse required=True 但 --version 功能?的主要内容,如果未能解决你的问题,请参考以下文章

__init__() 在 Python 2 中使用 argparse 得到了一个意外的关键字参数“必需”[重复]

带有可选子命令的 argparse 未按预期工作

argparse 错误:无法识别选项

如何使用 argparse 模块?

使用其他命名空间/字典更新 argparse 命名空间

每天讲解一点PyTorch 10argparse.ArgumentParser