我正在尝试用Python创建一个完全定制的“help”用法(我计划将其导入到许多我希望保持样式一致性的程序中),但是遇到了一些麻烦。你知道吗
下面是我现在得到的一个示例:
nameconstant version 1.0
USAGE: myprog.py [constant text] <input.ext> <input.ext>
several lines of text describing my program.. because it will be necessary
___________________
COMPULSORY ARGS:
input.ext
output.ext
___________________
OPTIONAL ARGS:
-v, --verbose print debugging messages to terminal
-h, --help
这就是我想要的样子:
nameconstant version 1.0
USAGE: myprog.py [constant text] <input.ext> <input.ext>
several lines of text
describing my program..
because it will be necessary
___________________
COMPULSORY ARGS:
input.ext
output.ext
___________________
OPTIONAL ARGS:
-v, --verbose print debugging messages to terminal
-h, --help
\n - not visible!
以下是我目前正在使用的代码:
#!/usr/bin/env python
import argparse
import sys
from os import path
version = "1.0"
prog = path.basename(sys.argv[0])
class USAGEformat(argparse.HelpFormatter):
def add_usage(self, usage, actions, groups, prefix=None):
if prefix is None:
prefix = 'nameconstant version '+ version+'\n\nUSAGE: '+prog
return super(USAGEformat, self).add_usage(
usage, actions, groups, prefix)
parser = argparse.ArgumentParser(add_help=False, formatter_class=USAGEformat, description='several lines of text\ndescribing my program..\n\nb
ecause it will be necessary', usage=' [optional args] <INPUT.ext> <OUTPUT.ext>')
parser._positionals.title = '___________________\nCOMPULSORY ARGS'
parser._optionals.title = '___________________\nOPTIONAL ARGS'
parser.add_argument('input', metavar="input.ext", type=argparse.FileType('rt'))
parser.add_argument('output', metavar="output.ext", type=argparse.FileType('wt'))
parser.add_argument('-v', '--verbose', action='store_true', default=False, help='print debugging messages to terminal')
parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS)
下一步我应该做些什么??谢谢您!非常感谢您的帮助。。我对Python还不熟悉。你知道吗
产生
RawDescriptionHelpFormatter
保留描述的格式。你知道吗我使用
'''...'''
作为描述,只是为了让代码看起来更好;这并不重要。你知道吗我用
argument_groups
替换了现有组的重命名。你的方式很好,但我认为我的方式是开发者想要的。你知道吗HelpFormatter
格式化不同的片段,在它们之间大量使用\n
,最后剥离出重复的片段(包括结尾)。所以我们必须确定并修改相关的方法(format_help
)。你知道吗自从我开始回答后,你在
usage
行上做了一些更改。你知道吗我同意这样的评论,即按惯例显示必需的参数,而不使用
[]
。你知道吗我使用这个用法是因为带前缀的行太长了。因此,它将其拆分,并将位置放在第二行,与可选位置对齐:
如果我设置
那么用法就是
我们得看看它是如何包装和缩进的,以使使用符合您的规格。你知道吗
编辑
在importing custom python modules.. why do only some elements carry over?
我解释说,每次您请求帮助或用法时,都会重新创建帮助格式化程序。定义
parser
设置格式化程序类,但不创建格式化程序。这意味着格式化程序类使用的任何全局变量都将作为运行时而不是安装时获取其值。你知道吗例如,
version
是全局的(对于模块)。它最初是“1.0”,这是出现在用法中的值。但如果我在上面的脚本末尾加上:用法行更改为:
如果导入此脚本时使用:
第一个帮助(导入后)使用文件中的“2.0”版本。但是第二个帮助使用新定义的
version
。你知道吗要更改解析器的
description
之类的内容,必须使用也就是说,我正在修改现有对象的属性。你知道吗
相关问题 更多 >
编程相关推荐