參數選項解析器

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」將被單獨解釋)。您可以使用“是”和“否”作為“真”和“假”的同義詞。

每個不以“-”開頭且不是前一個選項的必需參數的字串都是非選項位置參數,所有連續的字串也是如此。 “--”之後的每個字串都是非選項位置參數。

與選項相對應的欄位會在處理選項時更新。任何剩餘的位置參數都以 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 ( optionSources)

為物件集合建立ArgsOptionParser

ArgsOptionParser (Object... optionSources)

為一個或多個物件建立ArgsOptionParser

公共方法

getInopOptions ()

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

static String getOptionHelp (boolean importantOnly, Object optionObject)

輸出所有Option欄位的說明文字選項對象。

parse (String... args)

解析命令列參數“args”,設定提供給建構函式的“optionSource”的@Option欄位。

parse ( args) parse ( args)

接受ERROR(/List)參數的備用parse(String)方法

parseBestEffort ( args) parseBestEffort ( args)

採用ERROR(/List)參數的備用parseBestEffort(String)方法

parseBestEffort ( args, boolean forceContinue) parseBestEffort ( args, boolean forceContinue)

備用parseBestEffort(String)方法採用ERROR(/List)參數,並且可以強制繼續解析直到結束,即使某些參數無法解析。

parseBestEffort (String... args)

parse(String)的盡力而為的版本。

void validateMandatoryOptions ()

驗證是否已設定所有標記為必填的欄位。

公共構造函數

參數選項解析器

public ArgsOptionParser ( optionSources)

為物件集合建立ArgsOptionParser

參數
optionSources :配置對象。

投擲
ConfigurationException如果配置物件配置不正確。

參數選項解析器

public ArgsOptionParser (Object... optionSources)

為一個或多個物件建立ArgsOptionParser

參數
optionSources Object :配置對象。

投擲
ConfigurationException如果配置物件配置不正確。

公共方法

取得InopOptions

public  getInopOptions ()

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

退貨

取得選項協助

public static String getOptionHelp (boolean importantOnly, 
                Object optionObject)

輸出所有Option欄位的說明文字選項對象。

每個選項的說明文字將採用以下格式

   [-option_shortname, --option_name]          [option_description] Default:
   [current option field's value in optionObject]
 
如果選項欄位為空或為空,則將省略「預設…」文字。

參數
importantOnly boolean :如果為true則只列印重要選項的協助

optionObject Object :列印幫助文字的對象

退貨
String包含所有選項欄位的使用者友善幫助文字的字串

解析

public  parse (String... args)

解析命令列參數“args”,設定提供給建構函式的“optionSource”的@Option欄位。

參數
args String

退貨
處理所有選項後留下的位置參數的ERROR(/List)

投擲
ConfigurationException如果解析參數時發生錯誤。

解析

public  parse ( args)

接受ERROR(/List)參數的備用parse(String)方法

參數
args

退貨
處理所有選項後留下的位置參數的ERROR(/List)

投擲
ConfigurationException如果解析參數時發生錯誤。

解析盡力而為

public  parseBestEffort ( args)

採用ERROR(/List)參數的備用parseBestEffort(String)方法

參數
args

退貨
剩餘參數的ERROR(/List)

解析盡力而為

public  parseBestEffort ( args, 
                boolean forceContinue)

備用parseBestEffort(String)方法採用ERROR(/List)參數,並且可以強制繼續解析直到結束,即使某些參數無法解析。

參數
args :將包含剩餘參數的清單。

forceContinue boolean :如果即使某些參數未解析也應繼續解析,則為 True。

退貨
剩餘參數的ERROR(/List)

解析盡力而為

public  parseBestEffort (String... args)

parse(String)的盡力而為的版本。如果引發 ConfigurationException,則會在內部擷取該異常,並傳回剩餘參數(包括導致引發異常的參數)。該方法不會拋出異常。

參數
args String

退貨
剩餘參數的ERROR(/List)

驗證強制選項

public void validateMandatoryOptions ()

驗證是否已設定所有標記為必填的欄位。

投擲
com.android.tradefed.config.ConfigurationException
ConfigurationException