dersblog

Komut Satırı Seçeneklerini İşlemek (Command Line Option Processing), Python

Python script'lerine verilecek seçenekleri nasıl isleriz? İlk akla gelen sys üzerinden işlem yapmak,

import sys

if __name__ == "__main__":
    print sys.argv[0]
    print sys.argv[1]

gibi.. Burada script ismi sys.argv[0] içinde, ilk argüman sys.argv[1], vs. Eğer len(sys.argv) dersek kaç tane seçenek verildiğini raporlar.

Fakat bu seçeneklerden hangileri zorunlu, hangileri değil, hiç seçenek verilmeyince güzel bir hata mesajı verilse iyi olmaz mı, gibi ihtiyaçlar için argparse paketi kullanılabilir. Bir test.py icinde,

import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Bir program')
    parser.add_argument('arg1', type=str, help='arg1 tanimi.')
    parser.add_argument('arg2', type=str, help='arg2 tanimi.')
    parser.add_argument('--arg3', type=bool, nargs="?", help='arg3.')
    parser.add_argument('--arg4', type=str, nargs="?", help='arg4.')

    args = parser.parse_args()
    print args.arg1
    print args.arg2
    print args.arg3
    print args.arg4

Eğer hiç seçenek vermeden çağırırsak

usage: test.py [-h] [--arg3 [ARG3]] [--arg4 [ARG4]] arg1 arg2
test.py: error: too few arguments

mesaji gelecek. Istesek -h ile tanımları raporlatabilirdik.

Önünde -- olan seçenekler isim verilmeden geçilebilir.

python test.py secenek1 secenek2

gibi. Önünde -- olan ve nargs="?" diyen seçenekler şart olmayan seçeneklerdir.

python -u test.py secenek1 secenek2 --arg3 secenek3 --arg4 secenek4

Sonuç

secenek1

secenek2

True

secenek4
  1. seçeneğin True gelmesi doğru, çünkü tip tanımı da yapılabiliyor, ve o tipi bool olarak tanımlamıştık.

Yukarı