OptionParser Komut Satırı Seçenekleri Ruby Yolu

Ruby, komut satırı seçeneklerini, OptionParser'ı ayrıştırmak için güçlü ve esnek bir araçla donatılmıştır. Bunu nasıl kullanacağınızı öğrendikten sonra, asla ARGV'yi manuel olarak aramaya geri dönmeyeceksiniz. OptionParser, Ruby programcıları için oldukça cazip hale getiren bir dizi özelliğe sahiptir. Seçenekleri Ruby veya C ile veya getoptlong C işlevi, bu değişikliklerin bazılarının ne kadar hoş olduğunu göreceksiniz.

  • OptionParser (şimdiki değeri) KURU. Komut satırı anahtarını, bağımsız değişkenlerini, karşılaşıldığında çalıştırılacak kodu ve komut satırı anahtarının açıklamasını komut dosyanızda yalnızca bir kez yazmanız gerekir. OptionParser, bu açıklamadan sizin için otomatik olarak yardım ekranları oluşturacak ve argümanla ilgili her şeyi açıklamasından çıkaracaktır. Örneğin, --file [FILE] seçeneği isteğe bağlıdır ve tek bir argüman alır. Ayrıca, - [- no] -verbose gerçekten iki seçenektir ve her iki formu da kabul eder.
  • OptionParser otomatik olarak seçenekleri belirli bir sınıfa dönüştürür.
    instagram viewer
    Seçenek bir tamsayı alırsa, komut satırında iletilen herhangi bir dizeyi bir tamsayıya dönüştürebilir. Bu, komut satırı seçeneklerinin ayrıştırılmasında rol oynayan tediumun bazılarını azaltır.
  • Herşey çok içeride. Tüm seçenekler aynı yerdedir ve seçeneğin etkisi, seçeneğin tanımının hemen yanındadır. Seçeneklerin eklenmesi, değiştirilmesi gerekiyorsa veya birileri ne yaptığını görmek istiyorsa, bakmak için sadece bir yer var. Komut satırı ayrıştırıldığında, tek bir Hash veya OpenStruct sonuçları tutacaktır.

Yeter Zaten, Bana Bir Kod Göster

İşte nasıl kullanılacağına dair basit bir örnek OptionParser. Gelişmiş özelliklerin hiçbirini kullanmaz, sadece temel özellikleri kullanır. Üç seçenek vardır ve bunlardan biri bir parametre alır. Tüm seçenekler zorunludur. Orada -v / - ayrıntılı ve -q / - hızlı seçeneklerinin yanı sıra -l / - günlük dosyası DOSYA seçeneği. Ayrıca, komut dosyası seçeneklerden bağımsız dosyaların bir listesini alır.

 #! / usr / bin / env yakut

 # Birkaç görüntüyü yeniden boyutlandırıyormuş gibi bir komut dosyası

 'optparse' gerektir


 # Bu karma tüm seçenekleri içerecek

 # tarafından komut satırından ayrıştırıldı

 # OptionParser.

 seçenekler = {}


 optparse = OptionParser.new do | opts |

 # Üstte görüntülenen bir banner ayarlayın

 yardım ekranının # sayısı.

 opts.banner = "Kullanım: optparse1.rb [seçenekler] dosya1 dosya2 ..."


 # Seçenekleri ve yaptıklarını tanımlayın

 options [: ayrıntılı] = yanlış

 opts.on ('-v', '--verbose', 'Daha fazla bilgi ver')

 options [: ayrıntılı] = true

 son


 seçenekler [: hızlı] = yanlış

 opts.on ('-q', '--quick', 'Görevi hızlı bir şekilde gerçekleştir')

 seçenekler [: hızlı] = doğru

 son


 seçenekler [: logfile] = nil

 opts.on ('-l', '--logfile FILE', 'FILE dosyasına günlüğü yaz') do | file |

 options [: logfile] = dosya

 son


 # Bu yardım ekranını görüntüler, tüm programlar

 # bu seçeneğe sahip olduğu varsayıldı.

 opts.on ('-h', '--help', 'Bu ekranı görüntüle')

 ops koyar

 çıkış

 son

 son


 # Komut satırını ayrıştırın. İki form olduğunu unutmayın

 ayrıştırma yönteminin # sayısı. 'Ayrıştırma' yöntemi basitçe ayrıştırır

 # ARGV, 'ayrıştırma!' yöntemi ARGV'yi ayrıştırır ve kaldırır

 # orada bulunan seçeneklerin yanı sıra

 # Seçenekler. Geriye kalan, yeniden boyutlandırılacak dosyaların listesidir.

 optparse.parse!


 seçenekler [: ayrıntılı] ise "ayrıntılı olmak" koyar

 seçenekler [: hızlı] ise "hızlı olmak"

 seçenekler [: logfile] ise "# {options [: logfile]} dosyasına günlük kaydı" koyar


 ARGV.each do | f |

 "# {f} resmini yeniden boyutlandırıyor ..."

 uyku 0.5

 son

Kodun İncelenmesi

Başlangıç ​​olarak, optparse kütüphane gerekli. Unutmayın, bu bir mücevher. Ruby ile birlikte gelir, bu yüzden bir mücevher yüklemeye veya gerektirmeye gerek yoktur rubygems önce optparse.

Bu senaryoda iki ilginç nesne var. İlk olarak seçenekleri, en üst kapsamda ilan edildi. Basit bir boş esrar. Seçenekler tanımlandığında, varsayılan değerlerini bu karmaya yazarlar. Örneğin, bu komut dosyasının varsayılan davranışı değil ayrıntılı ol, yani seçenekleri [: ayrıntılı], false değerine ayarlanır. Komut satırında seçeneklerle karşılaşıldığında, seçenekleri etkilerini yansıtmak. Örneğin, -v / - ayrıntılı ile karşılaşıldığında, seçenekleri [: ayrıntılı].

İkinci ilginç nesne optparse. Bu OptionParser nesnenin kendisi. Bu nesneyi oluşturduğunuzda, ona bir blok geçirirsiniz. Bu blok inşaat sırasında çalıştırılır ve dahili veri yapılarında bir seçenekler listesi oluşturur ve her şeyi ayrıştırmaya hazır hale gelir. Bu blokta tüm sihir gerçekleşir. Tüm seçenekleri burada tanımlıyorsunuz.

Seçenekleri Tanımlama

Her seçenek aynı modeli izler. İlk olarak varsayılan değeri karmaya yazarsınız. Bu, en kısa sürede OptionParser inşa edilmiştir. Sonra, üzerindeyöntem, seçeneğin kendisini tanımlar. Bu yöntemin çeşitli formları vardır, ancak burada sadece biri kullanılır. Diğer formlar, otomatik tür dönüşümlerini ve bir seçeneğin kısıtlandığı değer kümelerini tanımlamanızı sağlar. Burada kullanılan üç argüman seçeneğin kısa biçimi, uzun biçimi ve açıklamasıdır.

üzerinde yöntemi uzun formdan bir takım şeyleri çıkarır. Bir şey çıkarım olacaktır herhangi bir parametre varlığıdır. Seçenek üzerinde herhangi bir parametre varsa, bunları bloğa parametre olarak iletir.

Komut satırında seçenekle karşılaşılırsa, blok üzerinde yöntemi çalıştırılır. Burada, bloklar fazla bir şey yapmaz, sadece seçenekler karma değerlerini ayarlar. Belirtilen bir dosyanın var olup olmadığını kontrol etmek gibi daha fazlası yapılabilir. Herhangi bir hata varsa, bu bloklardan istisnalar atılabilir.

Son olarak, komut satırı ayrıştırılır. Bu, ayrıştırmak! yöntemi OptionParser nesne. Aslında bu yöntemin iki formu vardır, ayrıştırma ve ayrıştırmak!. Ünlem işaretli versiyonun ima ettiği gibi yıkıcıdır. Sadece komut satırını ayrıştırmakla kalmaz, aynı zamanda bulunan tüm seçenekleri de kaldıracaktır. ARGV. Bu önemli bir şey, sadece seçeneklerden sonra sağlanan dosyaların listesini bırakacak ARGV.