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”会单独解释)。您可以使用“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) 手册页面
- 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(Object... optionSources)
为一个或多个对象创建 |
|
ArgsOptionParser(Collection<Object> optionSources)
为对象集合创建 |
|
公共方法 | |
|---|---|
Set<String>
|
getInopOptions()
返回未更改任何默认值的选项集。 |
static
String
|
getOptionHelp(boolean importantOnly, Object optionObject)
输出 optionObject
中所有 |
List<String>
|
parse(List<String> args)
采用 |
List<String>
|
parse(String... args)
解析命令行实参“args”,设置提供给构造函数的“optionSource” 的 @Option 字段。 |
List<String>
|
parseBestEffort(List<String> args)
采用 |
List<String>
|
parseBestEffort(List<String> args, boolean forceContinue)
采用 |
List<String>
|
parseBestEffort(String... args)
|
void
|
validateMandatoryOptions()
验证是否已设置所有标记为必填的字段。 |
公共构造函数
ArgsOptionParser
public ArgsOptionParser (Object... optionSources)
为一个或多个对象创建 ArgsOptionParser。
| 参数 | |
|---|---|
optionSources |
Object:配置对象。 |
| 抛出 | |
|---|---|
ConfigurationException |
如果配置对象配置不正确。 |
ArgsOptionParser
public ArgsOptionParser (Collection<Object> optionSources)
为对象集合创建 ArgsOptionParser。
| 参数 | |
|---|---|
optionSources |
Collection:配置对象。 |
| 抛出 | |
|---|---|
ConfigurationException |
如果配置对象配置不正确。 |
公共方法
getInopOptions
public Set<String> getInopOptions ()
返回未更改任何默认值的选项集。
| 返回 | |
|---|---|
Set<String> |
|
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]
| 参数 | |
|---|---|
importantOnly |
boolean:如果为 true,则仅输出重要选项的帮助信息 |
optionObject |
Object:要输出帮助文本的对象 |
| 返回 | |
|---|---|
String |
一个字符串,其中包含所有 Option 字段的用户友好型帮助文本 |
parse
public List<String> parse (List<String> args)
采用 List 实参的 ERROR(/#parse(String. args)) 替代方法
| 参数 | |
|---|---|
args |
List |
| 返回 | |
|---|---|
List<String> |
处理完所有选项后剩余的位置实参的 List。 |
| 抛出 | |
|---|---|
ConfigurationException |
如果在解析实参时出错。 |
parse
public List<String> parse (String... args)
解析命令行实参“args”,设置提供给构造函数的“optionSource” 的 @Option 字段。
| 参数 | |
|---|---|
args |
String |
| 返回 | |
|---|---|
List<String> |
处理完所有选项后剩余的位置实参的 List。 |
| 抛出 | |
|---|---|
ConfigurationException |
如果在解析实参时出错。 |
parseBestEffort
public List<String> parseBestEffort (List<String> args)
采用 ERROR(/#parseBestEffort(String. args)) 替代方法,该方法接受 List 的
实参
| 参数 | |
|---|---|
args |
List |
| 返回 | |
|---|---|
List<String> |
剩余实参的 List |
parseBestEffort
public List<String> parseBestEffort (List<String> args,
boolean forceContinue)采用 ERROR(/#parseBestEffort(String. args)) 替代方法,该方法采用 List 的
实参,即使某些实参无法
解析,也可以强制继续解析到最后。
| 参数 | |
|---|---|
args |
List:将包含剩余实参的列表。 |
forceContinue |
boolean:如果即使某些实参无法解析也应继续解析,则为 True。 |
| 返回 | |
|---|---|
List<String> |
剩余实参的 List |
parseBestEffort
public List<String> parseBestEffort (String... args)
ERROR(/#parse(String. args)) 的尽力而为版本。 如果抛出 ConfigurationException,则会在内部捕获该异常,并返回剩余的实参(包括导致抛出异常的实参)。此方法不会抛出异常。
| 参数 | |
|---|---|
args |
String |
| 返回 | |
|---|---|
List<String> |
剩余实参的 List |
validateMandatoryOptions
public void validateMandatoryOptions ()
验证是否已设置所有标记为必填的字段。
| 抛出 | |
|---|---|
|
com.android.tradefed.config.ConfigurationException |
ConfigurationException |
|