ArgsOptionParser

public class ArgsOptionParser
extends OptionSetter

java.lang.Object
   ↳ com.android.tradefed.config.OptionSetter
     ↳ com.android.tradefed.config.ArgsOptionParser


ป้อนข้อมูลในช่อง Option จากอาร์กิวเมนต์บรรทัดคำสั่งที่แยกวิเคราะห์แล้ว

ระบบจะแยกวิเคราะห์สตริงใน String[] ที่ส่งเข้ามาจากซ้ายไปขวา โดยแต่ละสตริงจะได้รับการจัดประเภทเป็นตัวเลือกแบบย่อ (เช่น "-v"), ตัวเลือกแบบยาว (เช่น "--verbose"), อาร์กิวเมนต์ของตัวเลือก (เช่น "out.txt" ใน "-f out.txt") หรืออาร์กิวเมนต์ตำแหน่งที่ไม่ใช่ตัวเลือก

อาร์กิวเมนต์ตัวเลือกแต่ละรายการต้องแมปกับOptionฟิลด์อย่างน้อย 1 รายการ ตัวเลือกแบบยาวจะแมปกับOptionชื่อ และตัวเลือกแบบสั้นจะแมปกับOptionชื่อย่อ ชื่อตัวเลือกและชื่อย่อของตัวเลือกแต่ละรายการต้องไม่ซ้ำกันเมื่อเทียบกับOptionฟิลด์อื่นๆ ทั้งหมดภายในออบเจ็กต์เดียวกัน

อาร์กิวเมนต์ตัวเลือกเดียวสามารถได้รับการแมปกับฟิลด์ Option หลายฟิลด์ที่มีชื่อเดียวกัน ในออบเจ็กต์หลายรายการ อาร์กิวเมนต์ Option สามารถใช้เนมสเปซเพื่ออ้างอิงฟิลด์ Option ภายในออบเจ็กต์เดียวได้อย่างไม่ซ้ำกันโดยใช้ชื่อคลาสแบบเต็มของออบเจ็กต์นั้นหรือค่า OptionClass นามแฝงโดยคั่นด้วย ":" เช่น

 --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) man
  • โมดูล "optparse" ของ Python (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 สำหรับออบเจ็กต์อย่างน้อย 1 รายการ

ArgsOptionParser(Collection<Object> optionSources)

สร้าง ArgsOptionParser สำหรับคอลเล็กชันของออบเจ็กต์

เมธอดสาธารณะ

Set<String> getInopOptions()

แสดงชุดตัวเลือกที่ไม่ได้เปลี่ยนค่าเริ่มต้น

static String getOptionHelp(boolean importantOnly, Object optionObject)

แสดงข้อความช่วยเหลือสำหรับOptionฟิลด์ทั้งหมดใน optionObject

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

ERROR(/#parse(String. args)) วิธีอื่นที่ใช้Listอาร์กิวเมนต์

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

แยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง "args" โดยตั้งค่าฟิลด์ @Option ของ "optionSource" ที่ระบุไว้ในตัวสร้าง

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

ERROR(/#parseBestEffort(String. args)) วิธีอื่นที่ใช้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 สำหรับออบเจ็กต์อย่างน้อย 1 รายการ

พารามิเตอร์
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)

แสดงข้อความช่วยเหลือสำหรับOptionฟิลด์ทั้งหมดใน optionObject

ข้อความช่วยเหลือสำหรับแต่ละตัวเลือกจะอยู่ในรูปแบบต่อไปนี้

   [-option_shortname, --option_name]          [option_description] Default:
   [current option field's value in optionObject]
 
ระบบจะละเว้นข้อความ "ค่าเริ่มต้น..." หากฟิลด์ตัวเลือกเป็น Null หรือว่างเปล่า

พารามิเตอร์
importantOnly boolean: หาก true ให้พิมพ์เฉพาะความช่วยเหลือสำหรับตัวเลือกที่สำคัญ

optionObject Object: ออบเจ็กต์ที่จะพิมพ์ข้อความช่วยเหลือ

การคืนสินค้า
String สตริงที่มีข้อความช่วยเหลือที่ใช้งานง่ายสำหรับฟิลด์ตัวเลือกทั้งหมด

แยกวิเคราะห์

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

ERROR(/#parse(String. args)) วิธีอื่นที่ใช้Listอาร์กิวเมนต์

พารามิเตอร์
args List

การคืนสินค้า
List<String> List ของอาร์กิวเมนต์ตำแหน่งที่เหลืออยู่หลังจากประมวลผลตัวเลือกทั้งหมด

ส่ง
ConfigurationException หากเกิดข้อผิดพลาดขณะแยกวิเคราะห์อาร์กิวเมนต์

แยกวิเคราะห์

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

แยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง "args" โดยตั้งค่าฟิลด์ @Option ของ "optionSource" ที่ระบุไว้ในตัวสร้าง

พารามิเตอร์
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: จริง หากควรแยกวิเคราะห์ต่อไปแม้ว่าอาร์กิวเมนต์บางรายการจะแยกวิเคราะห์ไม่ได้

การคืนสินค้า
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