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

Python argparse:像帮助字符串一样处理版本字符串,python,argparse,Python,Argparse,我正在使用Python3.6和argparse 1.1 除了-h/--help之外,我还希望有一个选项-v/--version,它打印一个包含版本信息的字符串并退出程序(与帮助字符串类似)。但是,当我还有位置参数时,执行 $ example --version 导致 usage: example ... error: too few arguments 变通解决方案 我有一个变通解决方案,我不喜欢,因为我需要相当多的代码行来做一些argparse可以做得更好的事情 import sys,a

我正在使用Python3.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
已经为以下内容提供了支持:

'version'
-这要求在
add_argument()
调用中有一个
version=
关键字参数,并打印版本信息并在调用时退出:

>>> 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

argparse
已经为以下内容提供了支持:

'version'
-这要求在
add_argument()
调用中有一个
version=
关键字参数,并打印版本信息并在调用时退出:

>>> 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

不相关,但docopt是一种比其他方法更好的方法。这应该有助于避免愚蠢的错误@伊戈尔看起来棒极了!不相关,但docopt是一种比其他方法更好的方法。这应该有助于避免愚蠢的错误@伊戈尔看起来棒极了!太好了,我想我误读了/误判了这部分帮助。事实上,我想提供一个多行字符串
'hello\nworld'
。它似乎忽略了换行符。我可以避免吗?请查看
argparse.\u VersionAction
的代码。它使用
帮助格式化程序
。因此,使用
rawscriptionhelpformatter
RawTextHelpFormatter
之一可能会保留换行符。要求执行通用的
打印
操作,以处理较长的文本<代码>版本是为简单的版本号显示而设计的,不再广泛使用。太好了,我想我误读了/误判了帮助的这一部分。事实上,我想提供一个多行字符串
'hello\nworld'
。它似乎忽略了换行符。我可以避免吗?请查看
argparse.\u VersionAction
的代码。它使用
帮助格式化程序
。因此,使用
rawscriptionhelpformatter
RawTextHelpFormatter
之一可能会保留换行符。要求执行通用的
打印
操作,以处理较长的文本<代码>版本设计用于简单的版本号显示,不再广泛使用。