sys.argv Yerine Click Kullanın

Python

Python ile konsol uygulamaları geliştirirken, konsolda bazen programı direkt olarak çağırmadan parametre kontrolü yapmamız gerekebiliyor. Örneğin şöyle bir çağrı:

Bu program basit ilkel yöntemlerce sys.argv kontrolü şeklinde yapılmakta. Ancak bunun doğruluğu için dahi uzunca uğraşmak gerekiyor. Bu sorunu aşmak için çeşitli kütüphaneler mevcuttur. Örneğin argparse, docopt gibi kütüphaneler de bu soruna kolaylık sağlıyorlar. Ancak bunların yapıları gerçekten çok karmaşık. Örneğin argparse interspersed dediğimiz argümanların devre dışı bırakılmasını desteklemiyor. Bu güvenlik açısından bir sorun oluşturabilir. Bu gibi bazı sorunlarla karşılaşmayı önlemek açısından Click, Armin Ronacher tarafından geliştirildi. Click kurulumu pip üzerinden yapılmakta.

komutu ile kurulumu yapabilirsiniz. Python 2.x ve 3.x sürümlerini desteklediğini de söylemek iyi olacaktır.

Kurulumdan sonra ilk olarak basit bir Merhaba uygulaması yapabiliriz.

Click’i import ettikten sonra command decoratörünü çağırarak artık bunun click ile kontrol edileceğini söyleyebiliriz.

Ayrıca click print() harici kendisi click.echo() işlevi ile printer görevini sağlayabiliyor. İlk uygulamamız bu oldu ve çalıştırma işlemini yapalım. Sonuçlara bakalım. Örneğin bu yukarıdaki kodları hello.py adında bir dosyanın içerisine yazdığımızı varsayalım.

Merhaba kısmından daha çok otomatik oluşturulan help sayfalarının dikkatinizi çektiğini umuyorum. Evet click otomatik olarak help sayfası oluşturabiliyor. Bunu siz yapmadan yapabiliyor.

Örnek olarak ilk parametrelerimi tanımlayalım ve bununla ilgili bir program yapalım. Programın işlevi girilen adı, girilen sayı kadar yazdırmak olsun. Bunun normalde for döngüsü ile basitçe yapılacağını biliyoruz.

Evet sahte kodu bu şekilde. Normalde Python ile yapmak isteseydik de bu format üzerinden gidecektik. Şimdi tekrar Click ile geliştirmeye dönelim. Öncelikle option() ve argument() decoratörlerini ekleyelim ve bunlara alması gereken değerleri bildirelim. Bu eklenen değerleri de yani decoratörler içerisinde tanımlanan option ve argument değerlerini de kendimize ait olan işleve işlev değişken olarak atayalım.

Burada iki decorator ve bu decoratorlerin argümanları var. Option decoratorunun aldığı –count argümanı programa şu özelliği katar:

program.py --count

Daha sonra gelen ve 1 değerini almış olan default ise varsayılan değeri belirler. Burada varsayılan değerin belirli bir veri tipi yoktur. Ancak belirlenen veri tipini help metninde tür olarak gösterir. Biz sayaç işlemini yapacağımız için 1 dedik. Sonradan gelen help ise bu özelliğe dair yardım metnini gösterir. Yani program.py –help çağırıldığı zaman bu yardım metni de ayrıca gösterilir.

Argument decoratörü ise bir argüman alır. Bu argüman da ayrıca bir default değer alabilir.

Son olarak programı tamamlayalım ve belirtilen miktar adedince yazdırma işlemini yaptıralım.

Kodlarımız bunlar. Konsolda şöyle çağırıyoruz.

Evet şimdilik bu kadar.