是否可以将 docopt --help 选项重定向到 less?
Is it possible to redirect docopt --help options to less?
通常,man 可用的长文档不会直接打印在屏幕上,而是重定向到 less(例如 man ls)。
是否可以使用 python 中的 docopt 模块来做到这一点?
没有官方方式,但您可以这样做:
"""
Usage:
docopt_hack.py
"""
import docopt, sys, pydoc
def extras(help, version, options, doc):
if help and any((o.name in ('-h', '--help')) and o.value for o in options):
pydoc.pager(doc.strip("\n"))
sys.exit()
if version and any(o.name == '--version' and o.value for o in options):
print(version)
sys.exit()
docopt.extras = extras
# Do your normal call here, but make sure it is after the previous lines
docopt.docopt(__doc__, version="0.1")
我们所做的是覆盖 extras
函数,该函数处理正常 docopt (https://github.com/docopt/docopt/blob/master/docopt.py#L476-L482). We then use pydoc to push the input into a pager () 中帮助的打印。请注意,使用 pydoc 是一个 non-safe 快捷方式,因为该方法没有记录并且可以删除。 extras
也是如此。 YMMV.
通常,man 可用的长文档不会直接打印在屏幕上,而是重定向到 less(例如 man ls)。
是否可以使用 python 中的 docopt 模块来做到这一点?
没有官方方式,但您可以这样做:
"""
Usage:
docopt_hack.py
"""
import docopt, sys, pydoc
def extras(help, version, options, doc):
if help and any((o.name in ('-h', '--help')) and o.value for o in options):
pydoc.pager(doc.strip("\n"))
sys.exit()
if version and any(o.name == '--version' and o.value for o in options):
print(version)
sys.exit()
docopt.extras = extras
# Do your normal call here, but make sure it is after the previous lines
docopt.docopt(__doc__, version="0.1")
我们所做的是覆盖 extras
函数,该函数处理正常 docopt (https://github.com/docopt/docopt/blob/master/docopt.py#L476-L482). We then use pydoc to push the input into a pager () 中帮助的打印。请注意,使用 pydoc 是一个 non-safe 快捷方式,因为该方法没有记录并且可以删除。 extras
也是如此。 YMMV.