python 사용법 - 파이썬 optparse, 사용량 출력에 추가 정보를 포함하는 방법?





3.6 option (6)


IndentedHelpFormatter를 상속 받았으며 매우 간단했습니다.

class PlainHelpFormatter(optparse.IndentedHelpFormatter):
    def format_description(self, description):
        if description:
            return description + "\n"
        else:
            return ""
    def format_epilog(self, epilog):
        if epilog:
            return epilog + "\n"
        else:
            return ""

파이썬의 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

저의 일에 적은 지식을 가진 사용자를 위해 사용 예제를 포함하고 싶습니다. 이 같은:

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()



사용 매개 변수를 사용하십시오.

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)

예제 출력 :

사용법 : [options] arg1 arg2

옵션 : -h, --help이 도움말 메시지를 표시하고 종료하십시오.
-v, --verbose 많은 잡음을 만든다.
-q, - 조용히 조용히 (나는 사냥하는 wabbits)
-fFILE, --file = FILE FILE에 출력 쓰기
-mMODE, - mode = MODE 상호 작용 모드 : '초보자', '중간', [기본], '전문가'

위험한 옵션 :주의 :이 옵션의 사용에 따른 위험은 사용자의 책임입니다. 그들 중 일부는 물린다고 믿어지고 있습니다. -g 그룹 옵션.

here 좀 봐.




이 작업을 수행하는 방법에 대한 또 다른 아이디어는 -h 대한 기본 동작을 비활성화하고 기본 도움말을 포함 할 수있는 사용자 고유의 도움말 화면을 인쇄하는 것입니다.

from optparse import OptionParser

parser = OptionParser(add_help_option=False, 
                      epilog="This can't be easily\n multilined")
parser.add_option('-h', '--help', dest='help', action='store_true',
                  help='show this help message and exit')

(options, args) = parser.parse_args()

if options.help:
    parser.print_help()
    print 'now we have an epilog'
    print 'with as many lines as you wish'
    sys.exit()

이것은 기본적으로 파서가 add_help_option=True 의 기본 동작으로 add_help_option=True 하는 print 입니다. 물론 print 은 제외됩니다.

그러나 모든 정직한면에서 시작 부분과 끝 부분에 설명 선을 추가하는 방법을 선호합니다.




parser = optparse.OptionParser(epilog="otherstuff")

기본 format_epilog 는 개행 문자를 제거하므로 (텍스트 랩 사용), 이와 같이 파서에서 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
""")
...

여기에 좀 더 자세히 설명합니다.
OptionParser 클래스의 optparse.py 를 보면 format_help 의해 호출되는 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 을 사용하는 textwrap.fill 입니다. 특히 textwrap.fill 은 에필로그의 줄 바꿈을 제거합니다. 개행을 보존하기를 원하기 때문에, OptionParser 를 서브 클래스 OptionParser , format_epilog 의 동작을 변경합니다




OptionParser 생성자에 전달할 수있는 description 매개 변수가 있습니다. 이렇게하면 usage 후 표시되지만 옵션 목록 앞에 나타나는 임의의 텍스트를 포함 할 수 있습니다.

16.4.3.1 참조 . 파서 만들기 .




파일을 복사하는 것은 아래 예제와 같이 비교적 간단한 작업이지만, 대신 shutil stdlib 모듈 을 사용해야합니다.

def copyfileobj_example(source, dest, buffer_size=1024*1024):
    """      
    Copy a file from source to dest. source and dest
    must be file-like objects, i.e. any object with a read or
    write method, like for example StringIO.
    """
    while True:
        copy_buffer = source.read(buffer_size)
        if not copy_buffer:
            break
        dest.write(copy_buffer)

파일 이름으로 복사하려면 다음과 같이하면됩니다 :

def copyfile_example(source, dest):
    # Beware, this example does not handle any edge cases!
    with open(source, 'rb') as src, open(dest, 'wb') as dst:
        copyfileobj_example(src, dst)




python optparse