使用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
Run Code Online (Sandbox Code Playgroud)
我想在我的工作中包含较少*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
Run Code Online (Sandbox Code Playgroud)
我怎么做到这一点?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()
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 42
parser = optparse.OptionParser(epilog="otherstuff")
Run Code Online (Sandbox Code Playgroud)
默认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
""")
...
Run Code Online (Sandbox Code Playgroud)
这里有更多细节.
如果您查看optparse.py该类OptionParser,则会调用format_epilog一个名为by的方法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)
Run Code Online (Sandbox Code Playgroud)
默认行为formatter.format_epilog是使用textwrap.fill除了其他内容之外,从epilog中删除换行符.由于我们希望保留换行符,因此我们将子类化OptionParser并更改其行为format_epilog
use*_*529 12
详细说明获胜的答案(这有助于我在自己的代码中解决同样的问题),一个快速而肮脏的选项是使用标识方法直接覆盖类的方法:
optparse.OptionParser.format_epilog = lambda self, formatter: self.epilog
optparser = optparse.OptionParser(epilog=helptext)
Run Code Online (Sandbox Code Playgroud)
获取帮助文本打印为逐字的结语.
我认为这会覆盖程序中OptionParser类的所有用法的epilog格式,但是,所有这些epilog必须逐字传递,在程序中的其他位置使用OptionParser.
使用usage参数:
usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
Run Code Online (Sandbox Code Playgroud)
您可以添加更多(仅作为示例):
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)
Run Code Online (Sandbox Code Playgroud)
示例输出:
用法:[options] arg1 arg2
选项:-h, - help显示此帮助消息并退出
-v, - verbose产生大量噪音[默认]
-q, - 静音(我正在寻找wabbits)
-fFILE, - file = FILE写输出到FILE
-mMODE, - mode = MODE交互模式:'新手','中间',[默认],'专家'之一危险选项:注意:使用这些选项的风险由您自行承担.据信其中一些人咬人.-g组选项.
看看这里.
| 归档时间: |
|
| 查看次数: |
16410 次 |
| 最近记录: |