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

ArgsOptionParser(Collection<Object> optionSources)

為物件集合建立 ArgsOptionParser

公用方法

Set<String> getInopOptions()

傳回未變更任何預設值的選項集。

static String getOptionHelp(boolean importantOnly, Object optionObject)

輸出 optionObject 中所有 Option 欄位的說明文字。

List<String> parse(List<String> args)

替代的 ERROR(/#parse(String. args)) 方法,會採用引數的 List

List<String> parse(String... args)

Parses the command-line arguments 'args', setting the @Option fields of the 'optionSource' provided to the constructor.

List<String> parseBestEffort(List<String> args)

替代的 ERROR(/#parseBestEffort(String. args)) 方法,會採用 List 引數的 List

List<String> parseBestEffort(List<String> args, boolean forceContinue)

替代 ERROR(/#parseBestEffort(String. args)) 方法,會採用 List 的引數,且即使部分引數未剖析,仍可強制繼續剖析至結尾。

List<String> parseBestEffort(String... args)

盡可能提供最佳服務。 ERROR(/#parse(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)

替代的 ERROR(/#parse(String. args)) 方法,會採用引數的 List

參數
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