ArgsOptionParser

public class ArgsOptionParser
extends OptionSetter

java.lang.Object
   ↳ com.android.tradefed.config.OptionSetter
     ↳ com.android.tradefed.config.ArgsOptionParser


파싱된 명령줄 인수에서 Option 필드를 채웁니다.

전달된 String[] 의 문자열은 왼쪽에서 오른쪽으로 파싱됩니다. 각 문자열은 짧은 옵션 (예: '-v'), 긴 옵션 (예: '--verbose'), 옵션에 관한 인수 (예: '-f out.txt'의 'out.txt'), 옵션이 아닌 위치 인수로 분류됩니다.

각 옵션 인수는 하나 이상의 Option 필드에 매핑되어야 합니다. 긴 옵션은 Option 이름에 매핑되고 짧은 옵션은 Option 짧은 이름에 매핑됩니다. 각 옵션 이름과 옵션 닉네임은 동일한 객체 내의 다른 모든 Option 필드와 관련하여 고유해야 합니다.

단일 옵션 인수가 여러 객체에서 동일한 이름을 가진 여러 Option 필드에 매핑될 수 있습니다. Option 인수에 네임스페이스를 지정하여 단일 객체 내의 Option 필드를 고유하게 참조할 수 있습니다. 이때 객체의 전체 클래스 이름 또는 ':'로 구분된 OptionClass 별칭 값을 사용합니다. 예를 들면 다음과 같습니다.

 --classname:optionname optionvalue or
 --optionclassalias:optionname optionvalue.
 

간단한 짧은 옵션은 '-' 뒤에 짧은 옵션 문자가 오는 것입니다. 옵션에 인수가 필요한 경우 (불리언이 아닌 옵션에 해당) 별도의 매개변수로 작성할 수 있지만 반드시 작성할 필요는 없습니다. 즉, '-f out.txt'와 '-fout.txt'는 모두 허용됩니다.

마지막 옵션을 제외하고 모든 옵션에 인수가 필요하지 않은 경우 단일 '-' 뒤에 여러 개의 짧은 옵션을 지정할 수 있습니다.

긴 옵션은 '--'로 시작하고 그 뒤에 여러 문자가 옵니다. 옵션에 인수가 필요한 경우 옵션 이름 바로 뒤에 '='로 구분하거나 다음 인수로 작성할 수 있습니다. 즉, '--file=out.txt' 또는 '--file out.txt'입니다.

불리언 긴 옵션 '--name'은 자동으로 '--no-name' 컴패니언을 가져옵니다. '--flag' 옵션이 주어지면 '--flag', '--no-flag', '--flag=true', '--flag=false'가 모두 유효하지만 '--flag true' 또는 '--flag false'는 허용되지 않습니다('--flag'만으로도 충분하므로 뒤의 'true' 또는 'false'는 별도로 해석됨). 'yes'와 'no'를 'true'와 'false'의 동의어로 사용할 수 있습니다.

'-'로 시작하지 않고 이전 옵션의 필수 인수가 아닌 각 문자열은 모든 후속 문자열과 마찬가지로 옵션이 아닌 위치 인수입니다. '--' 다음의 각 문자열은 옵션이 아닌 위치 인수입니다.

옵션이 처리되면 옵션에 해당하는 필드가 업데이트됩니다. 나머지 위치 인수는 List<String>으로 반환됩니다.

다음은 간단한 예입니다.

 // Non-@Option fields will be ignored.
 class Options {
     @Option(name = "quiet", shortName = 'q')
     boolean quiet = false;

     // Here the user can use --no-color.
     @Option(name = "color")
     boolean color = true;

     @Option(name = "mode", shortName = 'm')
     String mode = "standard; // Supply a default just by setting the field.

     @Option(name = "port", shortName = 'p')
     int portNumber = 8888;

     // There's no need to offer a short name for rarely-used options.
     @Option(name = "timeout" )
     double timeout = 1.0;

     @Option(name = "output-file", shortName = 'o' })
     File output;

     // Multiple options are added to the collection.
     // The collection field itself must be non-null.
     @Option(name = "input-file", shortName = 'i')
     List<File> inputs = new ArrayList<File>();

 }

 Options options = new Options();
 List<String> posArgs = new OptionParser(options).parse("--input-file", "/tmp/file1.txt");
 for (File inputFile : options.inputs) {
     if (!options.quiet) {
        ...
     }
     ...

 }

 
참고:

  • getopt(1) man 페이지
  • Python의 'optparse' 모듈 (http://docs.python.org/library/optparse.html)
  • POSIX '유틸리티 문법 가이드라인'(http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap12.html#tag_12_02)
  • GNU '명령줄 인터페이스 표준'(http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces)

참고:

요약

공개 생성자

ArgsOptionParser( optionSources)

객체 컬렉션의 ArgsOptionParser를 만듭니다.

ArgsOptionParser(Object... optionSources)

하나 이상의 객체의 ArgsOptionParser를 만듭니다.

공개 메서드

getInopOptions()

기본값을 변경하지 않은 옵션 집합을 반환합니다.

static String getOptionHelp(boolean importantOnly, Object optionObject)

optionObject의 모든 Option 필드에 대한 도움말 텍스트를 출력합니다.

parse(String... args)

명령줄 인수 'args'를 파싱하여 생성자에 제공된 'optionSource'의 @Option 필드를 설정합니다.

parse( args)

인수 ERROR(/List)를 사용하는 대체 parse(String) 메서드

parseBestEffort( args)

인수 ERROR(/List)를 사용하는 대체 parseBestEffort(String) 메서드

parseBestEffort( args, boolean forceContinue)

인수의 ERROR(/List)를 취하고 일부 인수가 파싱되지 않더라도 끝까지 파싱을 계속하도록 강제할 수 있는 대체 parseBestEffort(String) 메서드입니다.

parseBestEffort(String... args)

parse(String)의 최선의 버전입니다.

void validateMandatoryOptions()

필수로 표시된 모든 필드가 설정되었는지 확인합니다.

공개 생성자

ArgsOptionParser

public ArgsOptionParser ( optionSources)

객체 컬렉션의 ArgsOptionParser를 만듭니다.

매개변수
optionSources : 구성 객체입니다.

생성 값
ConfigurationException 구성 객체가 잘못 구성된 경우

ArgsOptionParser

public ArgsOptionParser (Object... optionSources)

하나 이상의 객체의 ArgsOptionParser를 만듭니다.

매개변수
optionSources Object: 구성 객체입니다.

생성 값
ConfigurationException 구성 객체가 잘못 구성된 경우

공개 메서드

getInopOptions

public  getInopOptions ()

기본값을 변경하지 않은 옵션 집합을 반환합니다.

반환 값

getOptionHelp

public static String getOptionHelp (boolean importantOnly, 
                Object optionObject)

optionObject의 모든 Option 필드에 관한 도움말 텍스트를 출력합니다.

각 옵션의 도움말 텍스트는 다음 형식입니다.

   [-option_shortname, --option_name]          [option_description] Default:
   [current option field's value in optionObject]
 
옵션 필드가 null이거나 비어 있으면 '기본값...' 텍스트가 생략됩니다.

매개변수
importantOnly boolean: true인 경우 중요한 옵션의 도움말만 출력합니다.

optionObject Object: 도움말 텍스트를 출력할 객체

반환 값
String 모든 옵션 필드에 대한 사용자 친화적인 도움말 텍스트가 포함된 문자열

parse

public  parse (String... args)

명령줄 인수 'args'를 파싱하여 생성자에 제공된 'optionSource'의 @Option 필드를 설정합니다.

매개변수
args String

반환 값
모든 옵션을 처리한 후 남은 위치 인수의 ERROR(/List)입니다.

생성 값
ConfigurationException 인수 파싱에 오류가 발생한 경우

파싱

public  parse ( args)

인수 ERROR(/List)를 사용하는 대체 parse(String) 메서드

매개변수
args

반환 값
모든 옵션을 처리한 후 남은 위치 인수의 ERROR(/List)

생성 값
ConfigurationException 인수 파싱에 오류가 발생한 경우

parseBestEffort

public  parseBestEffort ( args)

인수의 ERROR(/List)를 사용하는 대체 parseBestEffort(String) 메서드

매개변수
args

반환 값
남은 인수의 ERROR(/List)

parseBestEffort

public  parseBestEffort ( args, 
                boolean forceContinue)

인수의 ERROR(/List)를 취하고 일부 인수가 파싱되지 않더라도 끝까지 파싱을 계속하도록 강제할 수 있는 대체 parseBestEffort(String) 메서드입니다.

매개변수
args : 남은 인수가 포함된 목록입니다.

forceContinue boolean: 일부 인수가 파싱되지 않더라도 계속 파싱해야 하는 경우 True입니다.

반환 값
왼쪽 인수의 ERROR(/List)

parseBestEffort

public  parseBestEffort (String... args)

parse(String)의 최선의 버전입니다. ConfigurationException이 발생하면 예외가 내부적으로 캡처되고 나머지 인수 (예외 발생을 일으킨 인수 포함)가 반환됩니다. 이 메서드는 발생되지 않습니다.

매개변수
args String

반환 값
남은 인수의 ERROR(/List)

validateMandatoryOptions

public void validateMandatoryOptions ()

필수로 표시된 모든 필드가 설정되었는지 확인합니다.

생성 값
com.android.tradefed.config.ConfigurationException
ConfigurationException