2017-03-23 1 views
0

이후에 종료됩니다. 여기는 내 첫 번째 질문이므로 실수가 있으면 죄송합니다.Python CMD 모듈 : 쉘이 -h

나는 Python에서 일부 유튜브 기능으로 CMD를 사용하여 쉘을 만들고 있는데, 거의 완료되었으므로 기능은 훌륭하게 작동하지만 쉘이 몇 번이고 [명령]을 시도한 후에 종료됩니다 -h (argparse 원하는대로

As you can see, arguments help gets printed but then it quits the shell

I 입력 올바른 인수가 쉘 경우가 열릴 계속 :

)이를 위해 여기 당신이 볼 수 있도록 어떻게되는지의 예입니다. 여기

이 getSongUrl 함수의 코드입니다 :

parser = argparse.ArgumentParser(description='Shell parsers handler') 
subparsers = parser.add_subparsers() 

parser_getSongUrl = subparsers.add_parser("getSongUrl") 

parser_getSongUrl.add_argument("-s", "--song", help="Name of the song", type=str, required="true", nargs="+") 
parser_getSongUrl.add_argument("-l", "--limit", help="Limits the output", type=int, default=10) 
: 나는 모든 예을 본이 기능에 대한 파서가 CMD 클래스 전에 정의
def do_getSongUrl(self, arg): 
    """given a name, returns a list with all the videos and their URLs""" 

    args = parser_getSongUrl.parse_args(arg.split()) 

    song = args.song 

    song_str = ' '.join(word for word in song) 

    print("Searching: " + song_str) 
    print("Limiting results to: " + str(args.limit)) 

    res = musictools.get_song_urls(song_str) 

    for i in range(args.limit): 
     for (song_urls, song_titles) in res: 
      print(song_titles + ":") 
      print(song_urls) 
      print("") 

, 이것은이다, 여기에 파서에 대한 코드입니다

도움을 주셔서 미리 감사드립니다. 나는 아직 Python에 익숙하지 않으며 모든 피드백에 대해 감사 할 것입니다.

+0

'argparse'에 내장되어 있습니다. 그 전에 추가 한 옵션을 보자 :'-h/- help'. 그런데 왜 그 문제가 있습니까? –

+0

텍스트를 그림으로 게시하지 말고 대신 복사하여 붙여 넣으십시오. –

답변

0

-h 줄에는 무엇이 표시됩니까?

show this help message and exit 

subparsers하면 도움의 여러 수준, 주요 파서 하나 각 subparser 하나를 얻을 수 있습니다.

이것은, 명령 라인 -h, --help 정상 동작 인 쉘 명령 (예컨대 ls -h) 또는 argparse를 사용하는 스크립트를 사용할지 여부.

parser_getSongUrl.print_help() 
parser.print_help() 
parser.print_usage() 

은 종료하지 않고도 도움말을 표시합니다. 테스트 할 때 자주 사용합니다. 프로그램을 종료

0

인쇄 도움이 후 기본 작업입니다 :

class _HelpAction(Action): 
    <...> 
    def __call__(self, parser, namespace, values, option_string=None): 
     parser.print_help() 
     parser.exit() 

class ArgumentParser(_AttributeHolder, _ActionsContainer): 
    <...> 
    def exit(self, status=0, message=None): 
     if message: 
      self._print_message(message, _sys.stderr) 
     _sys.exit(status) 
이 이 exit()ArgumentParser.error()에서 호출

를 호출 할 때 예를 들어, 인식 할 수없는 주장이 나타난다.

따라서 파서의 exit()을 바꿔서이 동작을 변경할 수 있습니다. _HelpAction의 논리를 대신 덮어 쓰고 싶지는 않습니다. 도움말을 인쇄하거나 오류를보고 나서 파서가 작업을 끝내고 콘솔 루프 (명령 실행 코드 대신)로 제어를 되돌리기를 원하기 때문입니다. 예 : 특정 예외를 제기하여

또는 SystemExit을 콘솔 루프에 트랩하여 명령의 끝으로 처리 할 수 ​​있습니다.