Merhaba arkadaşlar. Komut ekranı ile çok uğraşan biriyseniz, argümanların ne kadar önemli olduğunu çok iyi bilirsiniz. Öyle ki, bir programı her defasında farklı modlarla,farklı sonuçlar üretecek şekilde başlatabilirsiniz.
Ancak argümanları nasıl kontrol edeceğimizi bilmezsek, kullanışlı bir program ortaya koyamayız. Kontrol etmek için kendi yöntemlerimizi kullanabiliriz, ancak hazır olan kütüphaneler dururken tekrar tekerleği icat etmeye gerek yok. O yüzden, bugün burda Python içerisinde hazır olarak bulunan argparse kütüphanesini nasıl kullanacağımızdan bahsedeceğiz.
argparse kütüphanesi ile bir python programına gelen argümanları kontrol altına alabiliriz. Argümanları ayırmak için, bir ArgumentParser nesnesi oluşturmamız gerekiyor.
Argümanları ayırmak için, iki farklı tanımlama şekli vardır.
1) Positional(sıralı) argüman tanımlama
Bu tanım şeklinde, programımıza gelen argümanların belirli bir sırada olmasını isteriz. Örneğin programımıza isim,soyisim,no şeklinde 3 argüman girilsin
Biz bu argümanları kendi programımızda tanımlarken, sıra ile, isim soyisim no şeklinde tanımlayacağız. Yani planımız şu: kullanıcı ilk argümanda isim gönderecek, ikinci argümanda soyisim gönderecek, son argüman ise no'su olacak bende buna göre programda kullanacağım. O zaman programımızı şöyle yazmamız gerekiyor
Programı çalıştıralım;
Gördüğünüz gibi, gelen 3 argüman sıra ile programımıza aktarıldı ve bizde bunları kullanarak ekrana yazdırdık. Eğer "no" adlı argümanın özellikle sayı olmasını istersek, type parametresini kullanabiliriz
Eğer int tipi dışında bir argüman değeri verilirse, program ekranda belirtecektir. Elbette sadece int değil, diğer değişken türlerini de kullanabiliriz.
Bu sıralı argümanları, biraz sonra göreceğimiz optional tanımlı argümanlar ile birlikte daha işlevli olarak kullanabiliriz.
2) Optional(isteğe bağlı) argüman tanımlama
Bu tanımlama şekli en işe yarar olanıdır. Ve en sık kullanılanı da budur. Yukarıda bir örnek vermiştik. Örneğimizde sıra ile argümanlar giriliyordu. Ancak, kullanıcı argümanları sıra ile vermeyebilir. İlk olarak soyisim yazıp sonra no yazabilir, isim yazmayabilir. Bu durumda, optional(isteğe bağlı) tarzda tanımlama yapmak gerekir. Yukarıdaki örneği optional tarzda yazalım.
Çıktılar;
Gördüğünüz gibi, argümanları sıra ile vermedik. Bunun yanı sıra istemediğimiz argümanları da programa göndermedik. Böylece sıralı olma kuralından kurtulmuş olduk. Eğer istersek --soyisim şeklinde uzun yazmak yerine, -s gibi kısa alternatif tanımlayabiliriz
Artık --soyisim yerine -s şeklinde de kullanarak argümanı gönderebiliriz.
Programımıza -h şeklinde argüman gönderirsek, bize argümanlar hakkında yardım mesajı gösterecektir. Eğer, bu yardım mesajlarını tanımlamak istersek argümanı eklediğimiz sıra, help parametresini kullanabiliriz
Bu yazıda bu kadar. Elimizden geldiğince basit bir şekilde argparse kütüphanesinden bahsettik. Eğer daha detaylı bilgi almak isterseniz, orijinal kaynaktan faydalanabilirsiniz.
Okuduğunuz için teşekkür ederiz. Fikrinizi aşağıda oylayarak belirtirseniz memnun oluruz :) Bir başka yazıda buluşmak üzere...
Ancak argümanları nasıl kontrol edeceğimizi bilmezsek, kullanışlı bir program ortaya koyamayız. Kontrol etmek için kendi yöntemlerimizi kullanabiliriz, ancak hazır olan kütüphaneler dururken tekrar tekerleği icat etmeye gerek yok. O yüzden, bugün burda Python içerisinde hazır olarak bulunan argparse kütüphanesini nasıl kullanacağımızdan bahsedeceğiz.
argparse kütüphanesi ile bir python programına gelen argümanları kontrol altına alabiliriz. Argümanları ayırmak için, bir ArgumentParser nesnesi oluşturmamız gerekiyor.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
parser = argparse.ArgumentParser() |
Argümanları ayırmak için, iki farklı tanımlama şekli vardır.
1) Positional(sıralı) argüman tanımlama
Bu tanım şeklinde, programımıza gelen argümanların belirli bir sırada olmasını isteriz. Örneğin programımıza isim,soyisim,no şeklinde 3 argüman girilsin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
python program.py ahmet yılmaz 100 |
Biz bu argümanları kendi programımızda tanımlarken, sıra ile, isim soyisim no şeklinde tanımlayacağız. Yani planımız şu: kullanıcı ilk argümanda isim gönderecek, ikinci argümanda soyisim gönderecek, son argüman ise no'su olacak bende buna göre programda kullanacağım. O zaman programımızı şöyle yazmamız gerekiyor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
parser = argparse.ArgumentParser() | |
parser.add_argument("isim") | |
parser.add_argument("soyisim") | |
parser.add_argument("no") | |
veri = parser.parse_args() # Gelen argümanları ayırıyoruz ve bir değişkene aktarıyoruz | |
print("isim: {}".format(veri.isim)) # Ulaştığımız isim niteliğinin, yukarıda tanımladığımız "isim" ile aynı olduğuna dikkat edelim | |
print("soyisim: {}".format(veri.soyisim)) | |
print("no: {}".format(veri.no)) |
Programı çalıştıralım;
Gördüğünüz gibi, gelen 3 argüman sıra ile programımıza aktarıldı ve bizde bunları kullanarak ekrana yazdırdık. Eğer "no" adlı argümanın özellikle sayı olmasını istersek, type parametresini kullanabiliriz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
parser.add_argument("no",type = int) |
Eğer int tipi dışında bir argüman değeri verilirse, program ekranda belirtecektir. Elbette sadece int değil, diğer değişken türlerini de kullanabiliriz.
Bu sıralı argümanları, biraz sonra göreceğimiz optional tanımlı argümanlar ile birlikte daha işlevli olarak kullanabiliriz.
2) Optional(isteğe bağlı) argüman tanımlama
Bu tanımlama şekli en işe yarar olanıdır. Ve en sık kullanılanı da budur. Yukarıda bir örnek vermiştik. Örneğimizde sıra ile argümanlar giriliyordu. Ancak, kullanıcı argümanları sıra ile vermeyebilir. İlk olarak soyisim yazıp sonra no yazabilir, isim yazmayabilir. Bu durumda, optional(isteğe bağlı) tarzda tanımlama yapmak gerekir. Yukarıdaki örneği optional tarzda yazalım.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--isim") | |
parser.add_argument("--soyisim") | |
parser.add_argument("--no") | |
veri = parser.parse_args() # Gelen argümanları ayırıyoruz ve bir değişkene aktarıyoruz | |
if(veri.isim): # Eğer isim argümanı verilmiş ise | |
print("isim: {}".format(veri.isim)) | |
if(veri.soyisim): # Eğer soyisim argümanı belirtilmiş ise | |
print("soyisim: {}".format(veri.soyisim)) | |
if(veri.no): # Eğer no argümanı belirtilmiş ise | |
print("no: {}".format(veri.no)) |
Çıktılar;
Gördüğünüz gibi, argümanları sıra ile vermedik. Bunun yanı sıra istemediğimiz argümanları da programa göndermedik. Böylece sıralı olma kuralından kurtulmuş olduk. Eğer istersek --soyisim şeklinde uzun yazmak yerine, -s gibi kısa alternatif tanımlayabiliriz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
parser.add_argument("--isim","-i") | |
parser.add_argument("--soyisim","-s") | |
parser.add_argument("--no","-n") |
Artık --soyisim yerine -s şeklinde de kullanarak argümanı gönderebiliriz.
Programımıza -h şeklinde argüman gönderirsek, bize argümanlar hakkında yardım mesajı gösterecektir. Eğer, bu yardım mesajlarını tanımlamak istersek argümanı eklediğimiz sıra, help parametresini kullanabiliriz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
parser.add_argument("--isim","-i",help = "Programa eklenecek kişinin ismi") | |
parser.add_argument("--soyisim","-s",help = "Programa eklenecek kişinin soyismi") | |
parser.add_argument("--no","-n",help = "Programa eklenecek kişinin no'su") |
Bu yazıda bu kadar. Elimizden geldiğince basit bir şekilde argparse kütüphanesinden bahsettik. Eğer daha detaylı bilgi almak isterseniz, orijinal kaynaktan faydalanabilirsiniz.
Okuduğunuz için teşekkür ederiz. Fikrinizi aşağıda oylayarak belirtirseniz memnun oluruz :) Bir başka yazıda buluşmak üzere...
adamsın, bir türlü Tr kaynak bulamamıştım, Teşekkür ederim.
YanıtlaSilGeç cevap verdiğim için kusura bakmayın. Yorum kutusuna sonradan düştüğü için onaylamam geç oldu. Rica ederim, faydası olduysa ne mutlu bana :)
Silgerçekten yararlı olmuş eline koluna sağlık
YanıtlaSilBasit ve güzel anlatım teşekkürler
YanıtlaSilSağolun, iyi çalışmalar :)
SilKoda ayırdığın alanlar çok küçük o alanı büyütürsen çok iyi olur
YanıtlaSilDüzeltme önerin için çok teşekkür ederim :) Bu yazıyı yayınladığım zamanlarda özel bir kod bloğu kullanıyordum, son yazılarımda artık github gist kullanıyorum. Yorumun üzerine buradaki kodları github gist'e aktardım. Umarım şimdi daha iyidir :)
Sil