python - argparse:像帮助字符串一样处理版本字符串

我正在使用 Python 3.6 和 argparse 1.1。

除了 -h/--help 我还想有一个选项 -v/--version打印带有版本信息的字符串并退出程序(就像使用帮助字符串一样)。但是,当我也有位置参数时,执行

$ example --version

结果

usage: example ... 
error: too few arguments

解决方案

我有一个解决方案,我不喜欢它,因为我需要相当多的代码行来做一些 argparse 可以做得更好的事情。

import sys,argparse

class MyParser(argparse.ArgumentParser):
    def format_help(self):
        return 'Help string\n'

def printversion():
    print('0.0.1')
    sys.exit(1)

if len(sys.argv)>1:
    if len(sys.argv[1])>0:
        if sys.argv[1] in ['--version']:
            printversion()

parser = MyParser()
parser.add_argument('argument',nargs=1,type=int)
parser.add_argument('-v','--version',action='store_true')

args = vars(parser.parse_args())

if args['version']: printversion()

最佳答案

argparse 已经有 a version action正是为了这个:

'version' - This expects a version= keyword argument in the add_argument() call, and prints version information and exits when invoked:

>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0

https://stackoverflow.com/questions/43596366/

相关文章:

vim - 将行合并到 vim 中的段落

php - Laravel Eloquent : route model binding not w

php - 从当前日期时间生成唯一的交易 ID

arrays - Swagger 的对象数组

angular - HTML5 Websql - 如何与 Ionic 3 和 Angular 4 一

domain-driven-design - ES/DDD 微服务中的报告

python - 一种不必每次都在 colorama 中重置颜色/样式的方法

perl - 在 Perl 中打印哈希值

python-3.x - python3 中 f2py 的 Makefile

sql - 在 SQL Server 中将所有表数据类型从文本更改为 varchar