【发布时间】:2018-04-17 12:05:08
【问题描述】:
我正在尝试使用 Python 创建一个完全自定义的“帮助”用法(我计划将其导入到许多我希望具有样式一致性的程序中),但遇到了一些麻烦。
- 我不知道为什么我的描述忽略了换行符... 试过""和'',
- 我无法让“:”出现在“...ARGS”行的 /newline 之后,显然它们坐在自己的行上看起来很奇怪,并且
- 我不知道如何在末尾添加换行符。请帮忙??
这是我现在得到的示例:
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 新手。
【问题讨论】:
-
要保留换行符,您需要使用(子类)
RAW...helpformatter 类之一,而不是它们的父类HelpFormatter。当你在看它时,看看它们是如何修改父级的。变化不大。 -
USAGE 行的约定是在方括号中包含可选参数。所以我不认为你真的想要 [input.ext] 和 [output.ext] 在第一行并将它们放在 COMPULSORY 部分。
-
@xhancar 谢谢你,我想这件事做错了有一段时间了,完全忽略了它,因为我觉得它看起来不错哈哈。赞赏!将检查是否在我所有现有代码中切换 和 []。
标签: python customization argparse