makaleler / Python Programlama / Python Komut Satırı Argümanları

Python Komut Satırı Argümanları

25.12.2016 04:05:47

Python Komut Satırı Argümanları Oluşturma ve Yönetme İşlemleri

Herhangi bir komut sayıtı argumanına erişim sağlamak için sys modülünü kullanabiliriz.


$ python test.py arg1 arg2 arg3
  • sys.argv komut satırı argümanlarının bir listesini tutar.
  • len(sys.argv), komut satırı argümanlarının toplam sayısını verir.

Burada sys.argv komut dosyası adını gösterir diğer liste elemanlarında ise sırasıyla argumanlar yer alır.

Aşağıda yer alan test.py dosyasını inceleyin.


#!/usr/bin/python

import sys 

print 'Arguman sayisi:', len(sys.argv), ' arguman.'
print 'Arguman listesi:', str(sys.argv)

Şimdi hazırlamış olduğumuz test.py dosyamızı aşağıdaki şekilde çalıştırın.


$ python test.py arg1 arg2 arg3

Çalıştırıldığı an aşağıdaki sonucu verir.

Arguman sayisi: 4 arguman.
Arguman listesi:

NOT: Yukarıda belirtildiği gibi, ilk bağımsız değişken her zaman komut dosyası adıdır ve bu liste içinde tutulduğu için arguman sayısına ilave olmaktadır.


Komut satırı bağımsız değişkenlerini ayrıştırma

Python, komut satırı seçeneklerini ve bağımsız değişkenlerini parse etmemize, yönetmemize yardımcı olan bir getopt modülü sunar. Bu modül fonksiyonlar ve bir exception sağlar.


getopt.getopt methodu

Bu method, komut satırı seçeneklerini ve parametre listesini ayrıştırır. Bu yöntem için basit sentaks yapısı aşağıdadır -


getopt.getopt(args, options, [long_options])

Parametrelerin ayrıntısı
  • args: Ayrıştırılacak 'Parse Edilecek' argüman listesi
  • options: Komut dosyasının tanımak istediği seçenek harfler dizesidir; bağımsız değişken gerektiren seçeneklerin ardından iki nokta üst üste (:) bulunur.
  • long_options: Bu isteğe bağlı parametredir ve belirtilirse, desteklenmesi gereken uzun seçeneklerin adları içeren dizelerin listesi olmalıdır. Bir argüman gerektiren uzun seçenekler, eşittir işareti ('=') ile izlenmelidir. Yalnızca uzun seçenekleri kabul etmek için, boş bir dize olmalıdır.
  • Bu method, iki öğeden oluşan değeri döndürür: birincisi (option, değer) çiftlerinin bir listesi. İkincisi ise, option listesi kaldırıldıktan sonra kalan program değişkenlerinin listesi.

Exception getopt.GetoptError

Argüman listesinde var olmayan bir seçenek bulunduğu zaman veya eksik bir argüman girildiği zaman orataya çıkar.

Exception, hatanın nedenini gösteren bir dize çıktısıdır. Bu çıktı hata mesajını ve ilgili seçenekleri gösterir.

Bu tip kullanımlara örnek kaynak ve hedef dosyalar gibi seçenekleri komut satırı üzerinde kullanmak istediğimiz zaman daha kullanışlı hale getiren durumlardır. Şimdi buna benzer bir senaryo uygulayalım komut satırı üzerinden iki adet dosya ismi gönderelim ve bu dosyaları kontrol etmek için seçenekler sunalım.


kullanim: test.py -s <kaynakdosya> -t <hedefdosya>

test.py dosyasını oluşturan kaynak kodlarımız.


#!/usr/bin/python

import sys, getopt

def islemler(argv):
   kaynakdosya = ''
   hedefdosya = ''
   try:
      opts, args = getopt.getopt(argv,"hs:t:",["kaynakdosya=","hedefdosya="])
   except getopt.GetoptError:
      print 'Kullanim: test.py -s <kaynakdosya> -t <hedefdosya>'
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print 'Kullanim: test.py -s <kaynakdosya> -t <hedefdosya>'
         sys.exit(2)
      elif opt in ("-s", "--kaynakdosya"):
         kaynakdosya = arg 
      elif opt in ("-t", "--hedefdosya"):
         hedefdosya = arg 
   print 'Kaynak dosya "', kaynakdosya
   print 'Hedef dosya "', hedefdosya

if __name__ == "__main__":
   islemler(sys.argv[1:])

Yukarıda yazdığımız python scriptini aşağıdaki şekilde çalıştıralım.


python test.py -h
Kullanim: test.py -s <kaynakdosya> -t <hedefdosya>

python test.py -s JPG -t
Kullanim: test.py -s <kaynakdosya> -t <hedefdosya>

python test.py -s kaynakdosya
Kaynak dosya " kaynakdosya
Hedef dosya "
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
efe
efe
17.05.2018 17:49:18

Çok iyi, tam da bunu arıyordum. Teşekkürler.

kurth4cker
kurth4cker
25.08.2020 04:15:54

Bunu bulduğuma sevindim. Biraz karmaşık gibi ama sanırım anlayabilirim.

anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda