문제

언급했듯이 문서 그만큼 optparse.OptionParser an IndentedHelpFormatter 형식화 된 옵션 도움말을 출력하려면 일부를 찾았습니다. API 문서.

필요한 위치 인수에 대해 비슷한 형식의 도움말 텍스트를 표시하고 싶습니다. 사용 텍스트에서. 유사한 위치 인수 형식에 사용할 수있는 어댑터 또는 간단한 사용 패턴이 있습니까?

설명

바람직하게는 stdlib 만 사용합니다. OptParse는이 하나의 형식의 뉘앙스를 제외하고는 훌륭합니다. 다른 패키지를 가져 오지 않고 수정할 수 있어야한다고 생각합니다. :-)

도움이 되었습니까?

해결책

가장 좋은 방법은 OptParse 모듈에 패치를 작성하는 것입니다. 그 동안 약간 수정 된 OptionParser 클래스로이를 달성 할 수 있습니다. 이것은 완벽하지는 않지만 원하는 것을 얻을 수 있습니다.

#!/usr/bin/env python
from optparse import OptionParser, Option, IndentedHelpFormatter

class PosOptionParser(OptionParser):
    def format_help(self, formatter=None):
        class Positional(object):
            def __init__(self, args):
                self.option_groups = []
                self.option_list = args

        positional = Positional(self.positional)
        formatter = IndentedHelpFormatter()
        formatter.store_option_strings(positional)
        output = ['\n', formatter.format_heading("Positional Arguments")]
        formatter.indent()
        pos_help = [formatter.format_option(opt) for opt in self.positional]
        pos_help = [line.replace('--','') for line in pos_help]
        output += pos_help
        return OptionParser.format_help(self, formatter) + ''.join(output)

    def add_positional_argument(self, option):
        try:
            args = self.positional
        except AttributeError:
            args = []
        args.append(option)
        self.positional = args

    def set_out(self, out):
        self.out = out
def main():
    usage = "usage: %prog [options] bar baz"
    parser = PosOptionParser(usage)
    parser.add_option('-f', '--foo', dest='foo',
                      help='Enable foo')
    parser.add_positional_argument(Option('--bar', action='store_true',
                                   help='The bar positional argument'))
    parser.add_positional_argument(Option('--baz', action='store_true',
                                   help='The baz positional argument'))
    (options, args) = parser.parse_args()
    if len(args) != 2:
        parser.error("incorrect number of arguments")
    pass

if __name__ == '__main__':
    main()

그리고 당신이 이것을 실행할 때 얻는 출력 :

Usage: test.py [options] bar baz

  Options:
    -h, --help         show this help message and exit
    -f FOO, --foo=FOO  Enable foo

Positional Arguments:
  bar  The bar positional argument
  baz  The baz positional argument

다른 팁

살펴보십시오 Argparse. 문서에 따르면 위치 인수와 더 멋진 도움말 메시지를 지원합니다.

나는 이것에 대한 깨끗한 솔루션에 관심이 있습니다. 나는 하나를 생각해 낼 수 없었습니다. OptionParser는 전적으로 옵션에 중점을 둡니다. 내가 찾을 수있는 한 위치 args와 함께 일할 것이 당신에게 아무것도주지 않습니다.

내가 한 일은 각각의 위치 인수에 대한 작은 문서 블록 목록을 생성하는 것이 었습니다. \ts 올바른 간격을 얻습니다. 그런 다음 Newlines와 합류하여 OptionParser로 전달되는 '사용법'문자열에 추가했습니다.

괜찮아 보이지만 어리석은 느낌이 들며 물론 문서가 옵션 목록 위에 나타납니다. 나는 그 주위에 어떤 방법을 찾지 못했거나 복잡한 작업을 수행하는 방법을 찾지 못했습니다. 즉, 주어진 옵션 세트는 해당 Arg에만 적용되기 때문에 위치 arg에 대한 설명 아래에 설명됩니다.

나는 Monkey-Patching Optionparser의 방법을 보았고 (1 년 정도 전에) 그다지 어렵지 않았을 것이라는 것을 기억하지만 그 길을 가고 싶지는 않았다.

위치 인수에 대한 대부분의 도움말 텍스트는 *닉스 박스의 사람 페이지에서 자주 사용되는 형식과 비슷합니다. 보세요 'CP'명령이 문서화되는 방법. 당신의 도움말 텍스트는 그것과 비슷해야합니다.

그렇지 않으면 파서를 사용하는 동안 "도움말"인수를 작성하는 한 문서가 자체적으로 생성되어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top