Python sys.argv ile basit bir CLI uygulaması
Tags: python, programming, motivation
Published: 2023-02-20 11:15:46

Merhaba
Bu yazıda size Python un sys.argv() komutu ile komut satırı arayüzünden nasıl kullanıcı girdisi alabileceğinizi anlatmaya çalışacağım.
Yazıya başlamadan önce komut satırı arayüzünden biraz bahsetmek istiyorum.

## Komut Satırı Arayüzü(CLI)
Komut Satırı Arayüzü (CLI), metin tabanlı bir düzenleme ortamıdır.Bilgisayarla etkileşim kurmak ve programların yüklenmesi ve programlarla çalışılması dahil olmak üzere çok sayıda işlemi gerçekleştirmek için belirtilen komutları kullanır.<br>

Her işletim sistemi yerleşik bir komut istemi ile birlikte gelir. 
Nodejs, Anaconda, Git ve benzeri bazı uygulama paketleri de kendi 
komut istemleriyle birlikte gelir.
CLI farklı platformlar veya paketler arasında farklı adlar taşısa da,amacı aynı kalır: komutlar olarak bilinen metin tabanlı talimatları kullanarak yazılım paketi veya bilgisayar sistemiyle özgürce etkileşim kurmanızı sağlamak.

Yani, CLI bir programlama dili değil, bir araçtır.CLI(Command Line Interface) ile işletim sistemi komut satırınız,terminaliniz veya konsolunuz aracılığıyla bir uygulama veya programla etkileşim kurabilirsiniz.<br>

### CLI kullanımı
Bu bilgiler ışığında hemen CLI yi kullanmaya başlayalım.Ben bu yazı kapsamında Linux kullanıyorum ve komutları da bu platform çerçevesinde yazacağım.Menü panelinden Uçbirimini açıyoruz ve ardından şu komutları yazıyoruz.
```
mkdir first-cli
cd first-cli
code .
```
`mkdir` ile bir dosya oluşturduk ve `cd` ile de dosyanın içerisine giriş yaptık.VS Code sisteminizde yüklü ise `code .` komutu ile dosyayı VS Code ile açabilirsiniz.main.py adında bir Python dosyası oluşturuyoruz ve şu kodu içerisine yazıyoruz.
```
print("Hello World")
```
Ardından tekrar uçbirime gelerek python dosyasını çalıştırıyoruz:
```
$ python3 main.py
```
Çıktı:
```
Hello World
```
Linux de komut satırını kısa ve öz bir şekilde kullandık şimdi yazının asıl konusuna geçelim.

## sys.argv
Bu komut Python ile yerleşik gelen sys kütüphanesinde bulunan değişken ve işlevlerden bir tanesidir.Amacı komut satırındaki kullanıcı girdisini toplamak.Peki bu ne demek?<br>
Yukarıda hatırlarsanız python dosyasını çalıştırmak için şöyle bir komut yazmıştık.
```
$ python3 main.py
```
Peki bu komutun yanına bir şeyler daha yazalım ve ne gibi bir çıktı alacağımızı görelim.
```
$ python3 main.py Fener sen çok yaşa
```
Çıktı:
```
Hello World
```
Gördüğünüz gibi sonradan yaptığımız eklemenin çıktıya herhangi bir etkisi yok.Ama biz onu yazdırmak istiyoruz işte bu durumda 
sys.argv imdadımıza yetişiyor.Hemen nasıl kullanıldığına bakalım.
Python dosyamıza şu kodu yazalım ve tekrar çalıştıralım.
```
import sys

print("Hello World")
print(sys.argv)
```
Çıktı:
```
Hello World
['main.py', 'Fener sen çok yaşa']
```
Çıktının ikinci satırına baktığımızda aslında istediğimizi kısmen elde ettik.Burada listenin ilk elemanı her zaman çalıştırdığımız dosyanın adıdır.Ve ardından gelenler ise bizim eklediğim ekstra kodlardır.Bu kodların tamamına şu şekilde erişebilirsiniz veya liste erişim yöntemlerini kullanabilirsiniz.
```
argv = sys.argv[1:]
```
Çıktı:
```
['Fener sen çok yaşa']
```
sys.argv nasıl kullanacağımızı öğrendiğimize göre şimdi küçük bir uygulama yapalım.

## Asal Sayı Uygulaması
Bu uygulama basit bir şekilde şunu gerçekleştirecek:
* Komut arayüzünden bir sayı alacak.
* Bu sayının asal olup olmadığını kontrol edecek.
* Eğer birden fazla sayı veya farklı karakter girilmiş ise hata verecek.
```
import sys

def is_prime(number):
    for n in range(2, int(number ** 0.5) + 1):
        if number % n == 0:
            return "Sayı Asal Değildir"
    
    return "Sayı Asaldır"

argv = sys.argv

if len(argv) > 2:
    print("Hata! Bir adet sayı giriniz...")
else:
    try:
        number = int(argv[1])
        print(is_prime(number))
    except ValueError:
        print("Sadece sayı giriniz...")

```
Örnek Girdiler:
```
$ python3 main.py 12
Sayı Asal Değildir
$ python3 main.py 3
Sayı Asaldır
```

Yazının sonuna geldik umarım faydalı olmuştur.<br>

Okuduğunuz ve vakit ayırdığınız için teşekkür ederim.
Bana ulaşmak için aşağıdaki adresleri kullanabilirsiniz.

* https://github.com/ogzcode
* https://twitter.com/ogzCode

Bir başka yazıda görüşmek üzere.