2017-05-23 7 views
1

나는 this SO Q&A과 다소 비슷한 질문이 있지만, click에 의해 생성 된 출력의 끝에 에필로그에 빈 줄을 추가하려고합니다.파이썬 클릭 모듈에서 생성 된 사용법 메시지 끝에 여러 개의 빈 줄을 추가하는 방법은 무엇입니까?

나는 다음과 같은 코드를 가지고 :

EPILOG='\n' + '-' * 20 

class SpecialEpilog(click.Group): 
    def format_epilog(self, ctx, formatter): 
     if self.epilog: 
      formatter.write_paragraph() 
      for line in self.epilog.split('\n'): 
       formatter.write_text(line) 

#------------------ 
@click.group(cls=SpecialEpilog, epilog=EPILOG, invoke_without_command=True) 
def cli(): 
    """Wraps cloud.tenable.com Nessus API calls in useful ways 

    \b 
    The CLI provides access to these subcommands: 
     - agent 
     - os 
     - vuln 

    Each subcommand can perform useful API queries within their respective domain. 
    """ 
    pass 

#------------------ 
# main 
cli.add_command(os) 
cli.add_command(agent) 
cli.add_command(vuln) 

이 다음 사용 출력을 생성합니다

Usage: nessus_query [OPTIONS] COMMAND [ARGS]... 



    Wraps cloud.tenable.com Nessus API calls in useful ways 

    The CLI provides access to these subcommands: 
     - agent 
     - os 
     - vuln 

    Each subcommand can perform useful API queries within their respective 
    domain. 

Options: 
    --help Show this message and exit. 

Commands: 
    agent API calls focusing on assets' details - Works... 
    os  API calls focusing on operating systems -... 
    vuln API calls focusing on vulnerabilities - Works... 


-------------------- 
$ myprompt> 

내 질문 :

내가하는 방법을 알아낼 수 없습니다를 인쇄 가능한 문자가 필요하지 않습니다. ters. 위의 대시 시퀀스를 제거하면 줄 바꿈 문자 (\n)가 더 이상 표시되지 않습니다. 즉 위의 사용이 간다 :

... 
Commands: 
    agent API calls focusing on assets' details - Works... 
    os  API calls focusing on operating systems -... 
    vuln API calls focusing on vulnerabilities - Works... 
$ myprompt> 

답변

1

문제는 click가 도움의 끝 부분에 빈 줄을 제거하기 위해 최적화를 수행한다는 것입니다. 동작은 click.Command.get_help()에와 같이 대체 할 수 있습니다 :

코드 :

class SpecialEpilog(click.Group): 

    def get_help(self, ctx): 
     """ standard get help, but without rstrip """ 
     formatter = ctx.make_formatter() 
     self.format_help(ctx, formatter) 
     return formatter.getvalue() 

시험 코드 :

import click 

EPILOG = '\n\n' 

class SpecialEpilog(click.Group): 
    def format_epilog(self, ctx, formatter): 
     if self.epilog: 
      formatter.write_paragraph() 
      for line in self.epilog.split('\n'): 
       formatter.write_text(line) 

    def get_help(self, ctx): 
     """ standard get help, but without rstrip """ 
     formatter = ctx.make_formatter() 
     self.format_help(ctx, formatter) 
     return formatter.getvalue() 

@click.group(cls=SpecialEpilog, epilog=EPILOG, invoke_without_command=True) 
def cli(): 
    pass 

@cli.command() 
def os(*args, **kwargs): 
    pass 

@cli.command() 
def agent(*args, **kwargs): 
    pass 

cli(['--help']) 

하지만 필요한 모든 공백이 아닌 에필로그입니다 :

일부 빈 줄입니다 필요 같은 동일한를 추가하는 우리는 전부 에필로그를 무시할 수 단순히 get_help()을 수정

class AddSomeBlanksToHelp(click.Group): 

    def get_help(self, ctx): 
     return super(AddSomeBlanksToHelp, self).get_help(ctx) + '\n\n' 

@click.group(cls=AddSomeBlanksToHelp, invoke_without_command=True) 
+1

감사 2 조각이 내가 원하는 정확히 무엇을했다! – slm