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 实参可以命名空间化,以便使用该对象的完整类名称或以“:”分隔的 OptionClass 别名值,唯一地引用单个对象中的 Option 字段。例如:

 --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”)。您可以将“是”和“否”用作“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) 手册页
  • 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)

替代 parseBestEffort(String) 方法,接受 ERROR(/List) 个参数,并且可以强制继续解析到结束,即使某些参数无法解析也是如此。

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 一个字符串,其中包含所有选项字段的易用帮助文本

解析

public  parse (String... args)

解析命令行参数“args”,设置提供给构造函数的“optionSource”的 @Option 字段。

参数
args String

返回
处理所有选项后剩余的位置参数的 ERROR(/List)

抛出
ConfigurationException 在解析参数时出错时返回 。

parse

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)

替代 parseBestEffort(String) 方法,接受 ERROR(/List) 个参数,并且可以强制继续解析到结束,即使某些参数无法解析也是如此。

参数
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