Opsi Baris Perintah OptionParser dengan Ruby Way

Ruby dilengkapi dengan alat yang kuat dan fleksibel untuk mengurai opsi baris perintah, OptionParser. Setelah Anda belajar cara menggunakan ini, Anda tidak akan pernah kembali melihat melalui ARGV secara manual. OptionParser memiliki sejumlah fitur yang membuatnya cukup menarik bagi programmer Ruby. Jika Anda pernah menguraikan opsi dengan tangan di Ruby atau C, atau dengan getoptlong Fungsi C, Anda akan melihat bagaimana menyambut beberapa perubahan ini.

  • OptionParser adalah KERING. Anda hanya perlu menulis saklar baris perintah, argumennya, kode yang akan dijalankan ketika ditemui, dan deskripsi saklar baris perintah satu kali di skrip Anda. OptionParser akan secara otomatis menghasilkan layar bantuan untuk Anda dari deskripsi ini, serta menyimpulkan segala sesuatu tentang argumen dari deskripsinya. Misalnya, ia akan tahu --file [FILE] Opsi adalah opsional dan mengambil satu argumen. Juga, akan tahu itu - [- tidak] -hindari benar-benar dua opsi dan akan menerima kedua bentuk.
  • OptionParser akan secara otomatis mengonversi opsi ke kelas tertentu.
    instagram viewer
    Jika opsi mengambil bilangan bulat, itu dapat mengkonversi string apa pun yang dilewatkan pada baris perintah ke bilangan bulat. Ini mengurangi beberapa kebosanan yang terlibat dalam penguraian opsi baris perintah.
  • Semuanya sangat terkandung. Semua opsi ada di tempat yang sama, dan efek dari opsi ada di samping definisi untuk opsi tersebut. Jika opsi harus ditambahkan, diubah, atau seseorang hanya ingin melihat apa yang mereka lakukan, hanya ada satu tempat untuk dilihat. Setelah baris perintah diuraikan, Hash atau OpenStruct tunggal akan menahan hasil.

Sudah Cukup, Tunjukkan Saya Beberapa Kode

Jadi, inilah contoh sederhana cara menggunakannya OptionParser. Itu tidak menggunakan salah satu fitur canggih, hanya dasar-dasarnya. Ada tiga opsi, dan salah satunya mengambil parameter. Semua opsi adalah wajib. Ada -v / - verbose dan -q / - cepat opsi, serta -l / - FIf logfile pilihan. Selain itu, skrip mengambil daftar file yang terpisah dari opsi.

 #! / usr / bin / env ruby

 # Sebuah skrip yang akan berpura-pura mengubah ukuran sejumlah gambar

 membutuhkan 'optparse'


 # Hash ini akan menampung semua opsi

 # diuraikan dari baris perintah oleh

 # OptionParser.

 options = {}


 optparse = OptionParser.new do | opts |

 # Atur spanduk, ditampilkan di bagian atas

 # pada layar bantuan.

 opts.banner = "Penggunaan: optparse1.rb [opsi] file1 file2 ..."


 # Tetapkan opsi, dan apa yang mereka lakukan

 options [: verbose] = false

 opts.on ('-v', '--verbose', 'Keluarkan informasi lebih lanjut') lakukan

 options [: verbose] = true

 akhir


 opsi [: cepat] = salah

 opts.on ('-q', '--quick', 'Lakukan tugas dengan cepat') lakukan

 options [: quick] = true

 akhir


 options [: logfile] = nil

 opts.on ('-l', '--logfile FILE', 'Write log to FILE') lakukan | file |

 options [: logfile] = file

 akhir


 # Ini menampilkan layar bantuan, semua program

 # diasumsikan memiliki opsi ini.

 opts.on ('-h', '--help', 'Tampilkan layar ini') lakukan

 menempatkan opts

 keluar

 akhir

 akhir


 # Pisahkan baris perintah. Ingat ada dua bentuk

 # dari metode parse. Metode 'parse' hanya mem-parsing

 # ARGV, sementara 'parse!' metode mem-parsing ARGV dan menghapus

 # opsi apa pun yang ditemukan di sana, serta parameter apa pun untuk

 # opsi. Yang tersisa adalah daftar file yang akan diubah ukurannya.

 optparse.parse!


 menempatkan "Being verbose" jika opsi [: verbose]

 menempatkan "Being quick" jika opsi [: cepat]

 menempatkan "Logging ke file # {options [: logfile]}" jika opsi [: logfile]


 ARGV. Setiap melakukan | f |

 menempatkan "Mengubah ukuran gambar # {f} ..."

 tidur 0,5

 akhir

Memeriksa Kode

Untuk memulai, optparse perpustakaan diperlukan. Ingat, ini bukan permata. Muncul dengan Ruby, jadi tidak perlu menginstal permata atau memerlukan rubygems sebelum optparse.

Ada dua objek menarik dalam skrip ini. Yang pertama adalah pilihan, dideklarasikan pada ruang lingkup paling atas. Ini kosong sederhana hash. Ketika opsi didefinisikan, mereka menuliskan nilai defaultnya untuk hash ini. Misalnya, perilaku default untuk skrip ini tidak berbicaralah, jadi pilihan [: verbose] disetel ke false. Ketika opsi ditemukan pada baris perintah, mereka akan mengubah nilai-nilai di pilihan untuk mencerminkan efeknya. Misalnya kapan -v / - verbose ditemui, itu akan ditugaskan untuk pilihan [: verbose].

Objek menarik kedua adalah optparse. Ini adalah OptionParser objek itu sendiri. Ketika Anda membangun objek ini, Anda memberikannya satu blok. Blok ini dijalankan selama konstruksi dan akan membangun daftar opsi dalam struktur data internal, dan bersiap-siap untuk menguraikan semuanya. Di blok inilah semua keajaiban terjadi. Anda menentukan semua opsi di sini.

Menentukan Opsi

Setiap opsi mengikuti pola yang sama. Anda pertama kali menulis nilai default ke dalam hash. Ini akan terjadi segera setelah OptionParser dibangun. Selanjutnya, Anda memanggil dimetode, yang mendefinisikan opsi itu sendiri. Ada beberapa bentuk metode ini, tetapi hanya satu yang digunakan di sini. Formulir lain memungkinkan Anda untuk menentukan konversi jenis otomatis dan set nilai yang dibatasi oleh opsi. Tiga argumen yang digunakan di sini adalah bentuk pendek, bentuk panjang, dan deskripsi opsi.

Itu di Metode akan menyimpulkan sejumlah hal dari bentuk panjang. Satu hal yang akan disimpulkan adalah keberadaan parameter apa pun. Jika ada parameter yang ada pada opsi, itu akan meneruskannya sebagai parameter ke blok.

Jika opsi ditemukan pada baris perintah, blok dilewatkan ke di metode dijalankan. Di sini, blok tidak melakukan banyak hal, mereka hanya menetapkan nilai dalam hash opsi. Banyak yang bisa dilakukan, seperti memeriksa apakah file yang dimaksud ada, dll. Jika ada kesalahan, pengecualian dapat dilempar dari blok ini.

Akhirnya, baris perintah diuraikan. Ini terjadi dengan memanggil parse! metode pada OptionParser obyek. Sebenarnya ada dua bentuk metode ini, parse dan parse!. Seperti yang disiratkan oleh versi dengan tanda seru, itu merusak. Tidak hanya menguraikan baris perintah, tetapi juga akan menghapus opsi yang ditemukan ARGV. Ini adalah hal yang penting, ia hanya akan meninggalkan daftar file yang disediakan setelah opsi masuk ARGV.