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)
Parses the command-line arguments 'args', setting the @Option fields of the 'optionSource' provided to the constructor. |
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)
替代的 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 |
|