4

나는 Groovy CliBuilder를 배우고 있으며, 틀린 주장을 어떻게 인식해야 할지를 모르겠다. 내가 잘못된 옵션 아무런 변화가없는 한, 예를 들어, 함께 -p을 내 스크립트를 호출하는 경우Groovy CliBuilder, 잘못된 인수를 인식하는 방법?

def cli = new CliBuilder() 
cli.s args: 1, longOpt: 'sdkdir', 'sdkdir usage info' 
cli.h args: 0, longOpt: 'help', 'print usage information' 
def opt = cli.parse(args) 
if (!opt) { 
    //how to be in this case? seems I can never reach here 
    println "something went wrong, but I don't know what" 
} else if (opt.h) { 
    cli.usage() 
} else (!opt.s) { 
    println "missing required option -s, try with --help for more information" 
} else { 
    //do something 
} 

다음 예제 코드를 생각해 보자. 마찬가지로, 옵션 뒤에 인수를 추가해도 감지되지 않습니다.

어떻게 오류를 감지하고 알릴 수 있습니까?

또한, 작은 불편은 이론적으로, 내가 required: true를 추가 할 수 있도록 내 예에 -s는 필수 매개 변수가 나는하거나 -h으로도 필요한 것입니다 수 없습니다 실제로이라고,하지만 난 그것을 테스트하는 생각 if은 더 좋은 방법이없는 한 괜찮습니다.

내 진짜 문제는 원치 않는 옵션과 인수를 찾는 것입니다. 어떤 도움을 주셔서 감사합니다. 감사합니다.

업데이트 : 감사합니다 @rodion 귀하의 의견을 위해, 나는 충분히 단순 대신에 충분할 것 같아요. 여기에 내가 무엇을 최대 온 것입니다 :

#!/usr/bin/groovy 
def cli = new CliBuilder(usage: 'cliTest -s sdkdir {projectName}', 
         header: 'Command line parameter parsing test in Groovy') 
cli.s longOpt: 'sdkdir', args: 1, 'sdkdir usage info, REQUIRED' 
cli.h longOpt: 'help', 'print usage information' 
def opt = cli.parse(args) 
def errMsg = "Invalid arguments.\nusage: ${cli.usage}\n" + 
     "Try `cliTest --help' for more information." 
if (!opt) { 
    //should never happen, since I don't have required parameters in CliBuilder 
    println "error processing arguments\n" 
} else if (opt.h) { 
    cli.usage() 
} else if (!opt.s) { 
    println errMsg 
} else if (opt.arguments().size() != 1) { 
    println errMsg 
} else { 
    println "Creating project ${opt.arguments()[0]}, sdkdir ${opt.s.value}" 
} 

이 솔루션은 충분하지만, 그것이 잘못 인 매개 변수를 알려하지 않기 때문에 완벽하지,하지만 단지 간결한 메시지 또는 인쇄 사용 정보를 알려줍니다. 다음은 몇 가지 테스트입니다.

제 목적으로는 만족 스럽지만 더 좋은 방법을 아는 사람이 있으면 알려주세요.

또한 required: true 옵션이 있고 인수가 누락되었을 때 !opt 대소 문자가 있음을 알았지 만, 필자의 이해로는 결코 사용할 수 없기 때문에 도움말 옵션 만 사용할 수 없기 때문에이 문자를 사용할 수 없습니다.

답변

2

이것은 this issue과 관련이있는 것 같습니다. 분명히 구문 분석 후 opt을 검사 할 수 있습니다 (그러나 null 인 경우 아무 것도 남지 않았습니다). 아, 그리고 그 문제는 이상하게 생긴다 아니 버그, 음 ... wierd.

+0

확인, 감사를 만나면

CliBuilder cli = new CliBuilder(usage:'script-name',stopAtNonOption:false) 

는 다음, CliBuilder 즉시 오류 메시지와 함께 종료됩니다, 그것은 할 수 있습니다. 기자가 말했듯이, 그것은 문서에 언급되어야하지만, 나는 그것도 보지 못했습니다. 'required : true' 옵션이 있고 인수가 빠졌을 때'! opt' 케이스가 발생할 수 있습니다. 그러나 CliBuilder에게 필수 인수를 관리하도록 요청하지 않습니다. 그 이후로'-h'와 같은 독립형 옵션을 사용할 수 없습니다. 도움이 필요하거나 버전에'-v'가 필요합니다. – stivlo

9

groovy CliBuilder 속성 stopAtNonOption을 false로 설정하십시오. (기본값은 true입니다.) 나는 이것이 직관력이없는 것으로 알고있다. 당신이 당신의 명령 줄 응용 프로그램을 실행할 때이없는 옵션, 예컨대 :

$ script-name -bad 
error: Unrecognized option: -bad 
+0

감사합니다. 이것이 내가 찾던 해결책이었다. – pveentjer

+0

유효하지 않은 모든 인수를 처음 보는 것 대신 표시 할 수 있는지 알고 있습니까? – Sufendy