python optparse,如何在使用信息中包含额外信息?
我想用Python的optparse模块,在正常的使用输出下面加一些额外的示例行。现在我的help_print()输出看起来是这样的:
usage: check_dell.py [options]
options:
-h, --help show this help message and exit
-s, --storage checks virtual and physical disks
-c, --chassis checks specified chassis components
我希望能为那些对*nix不太熟悉的同事提供一些使用示例,类似这样的:
usage: check_dell.py [options]
options:
-h, --help show this help message and exit
-s, --storage checks virtual and physical disks
-c, --chassis checks specified chassis components
Examples:
check_dell -c all
check_dell -c fans memory voltage
check_dell -s
我该怎么做呢?optparse有哪些选项可以实现这个功能?现在的代码是:
import optparse
def main():
parser = optparse.OptionParser()
parser.add_option('-s', '--storage', action='store_true', default=False, help='checks virtual and physical disks')
parser.add_option('-c', '--chassis', action='store_true', default=False, help='checks specified chassis components')
(opts, args) = parser.parse_args()
6 个回答
使用 usage
参数:
usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
你可以通过以下方式添加更多选项(这只是个例子):
group = OptionGroup(parser, "Dangerous Options",
"Caution: use these options at your own risk. "
"It is believed that some of them bite.")
group.add_option("-g", action="store_true", help="Group option.")
parser.add_option_group(group)
示例输出:
用法: [选项] 参数1 参数2
选项: -h, --help 显示这个帮助信息并退出
-v, --verbose 输出很多信息 [默认选项]
-q, --quiet 非常安静(我在打猎兔子)
-fFILE, --file=FILE 将输出写入 FILE
-mMODE, --mode=MODE 交互模式:可以是 'novice'(新手)、'intermediate'(中级)、[默认]、'expert'(专家)危险选项: 注意:使用这些选项风险自负。相信有些选项会带来麻烦。 -g 组选项。
可以在 这里 查看更多信息。
进一步解释一下获胜答案(它帮助我解决了自己代码中的同样问题),一个简单粗暴的办法是直接用一个身份方法来覆盖这个类的方法:
optparse.OptionParser.format_epilog = lambda self, formatter: self.epilog
optparser = optparse.OptionParser(epilog=helptext)
这样可以让帮助文本以原样的形式打印出来,作为结尾部分。
不过,我觉得这样会覆盖你程序中所有使用OptionParser类的地方的结尾格式,所以在你程序的其他地方使用OptionParser时,所有这样的结尾都必须原样传入。
parser = optparse.OptionParser(epilog="otherstuff")
默认的 format_epilog
会去掉换行符(使用了 textwrap),所以你需要在你的解析器中重写 format_epilog
,像这样做。
def main():
class MyParser(optparse.OptionParser):
def format_epilog(self, formatter):
return self.epilog
parser =MyParser(epilog=
"""Examples:
check_dell -c all
check_dell -c fans memory voltage
check_dell -s
""")
...
这里有一点更多的细节。
如果你查看 optparse.py
文件中的 OptionParser
类,会发现有一个叫 format_epilog
的方法,它是由 format_help
调用的。
这是来自 optparse.py 的一段代码。
def format_epilog(self, formatter):
return formatter.format_epilog(self.epilog)
def format_help(self, formatter=None):
if formatter is None:
formatter = self.formatter
result = []
if self.usage:
result.append(self.get_usage() + "\n")
if self.description:
result.append(self.format_description(formatter) + "\n")
result.append(self.format_option_help(formatter))
result.append(self.format_epilog(formatter))
return "".join(result)
默认情况下,formatter.format_epilog
的行为是使用 textwrap.fill
,这个方法会去掉 epilog 中的换行符。因为我们希望保留换行符,所以我们需要创建一个 OptionParser
的子类,并改变 format_epilog
的行为。