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.
 

簡單的短選項是「-」後面接著短選項字元。如果選項需要引數 (任何非布林值選項的引數都是 true),則該引數可以寫成獨立參數,但並不需要。也就是說,「-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)

替代 parseBestEffort(String) 方法,可接收 ERROR(/List) 的引數

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 Config 物件設定不正確。

公用方法

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]
 
如果選項欄位為空值或空白,系統會省略「Default...」文字。

參數
importantOnly boolean:如果 true 只列印重要選項的說明

optionObject Object:要顯示說明文字的物件

傳回
String 字串,其中包含所有選項欄位的友善使用者說明文字

parse

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