Python ile Clear Fonksiyonu - Mustafa Sabri OĞUZ

Duyurular

8 Haziran 2019 Cumartesi

Python ile Clear Fonksiyonu

Python ile programlamanın başlarında mısınız? Yada basit ama kullanışlı bir programlar üretip, arayüzü arka plana sallayanlardan mısınız? Neden mi tüm bu sorular? Çünkü bugün ufak bir program yazarken, ihtiyaç duyduğum bir işlevi sizlerle paylaşmak ve programlama notlarımın arasına yeni bir kod daha iliştirmek istedim.

İhtiyaç

Üzerinde çalıştığım yazılım deneyi, şimdilik küçük ve gelişmiş bir arayüze ihtiyacı olmayan bir proje... Bu nedenle programlama derslerinin başlarında gördüğümüz metinsel menüleri içeren bir arayüzün yeterli olacağını düşündüm ve koyuldum metinsel ifadeleri oluşturmaya...

Problem

Metinsel arayüz için yazılarımızı hazırladık hazırlamasına fakat çıktılarımız alt alta birbirini takip ettiğinden bir metinsel bir karmaşaya neden olmakta ve oluşturmaya çalıştığımız arayüz, estetik olarak hiç hoş gözükmeyecektir. Bunu altta ki resimde görebilirsiniz.
Her işlem seçiminde eski çıktıların, komut istemci sinden (konsol - terminal) temizlenmesi gerekiyor. Böylece programımız sayfa sayfa, sade bir şekilse çıktılar oluşabilsin. Ayrıca bu işlem tüm işletim sistemlerinde çalışabiliyor olması lazım.

Çözüm

Konsol penceresinin her işlemden önce temizlenebilmesi için temizleme komutunun kullanılması gerekiyor. Temelde bu arayüzlerin çalışma mantığı aynı olmasına rağmen işletim sistemlerine göre farklılıklar bulunuyor. Konumuz olan komutlar; Windows işletim sistemlerinde "cls", Mac ve Linux işletim sistemlerinde ise "clear" komutu dur. Python'da geliştirdiğimiz yazılımlar her işletim sisteminde çalışacağı için bizim bu komut ayrımını yapacak basit bir clear fonksiyonu yazmamız gerekiyor.

Peki bu işletim sistemi ayrımını nasıl yapabiliriz? Bunun için Python'un işletim sistemlerini birbirinden ayırt edebilmek için kullandığı "os" modülünü kullanacağız. Os modülü, işletim sisteminin İngilizce ifadesi olan "Operating System" in baş harflerinin kısaltılmasını kullanmıştır.
import os
ifadesi ile modülü kodumuza dahil ediyoruz.
os.name
Ardından os modülünün name değişkeninde ki değeri; if karar yapısını kullanarak, işletim sistemlerinin kısaltmaları ile kontrolünü sağlıyoruz.
Bu kısaltmalar; nt (Windows), mac (MacOS), posix (Linux) şeklindedir. 
os.system([Temizleme Komutu])
Sağlanan if kontrolünde hangi işletim sistemi ile eşleşirse, o işletim sistemin temizleme komutunu parametre olarak yine os modülü içerisinde bulunan sistem komutlarını çalıştıran system() fonksiyonuna iletiyoruz.

Buraya kadar anlattıklarımı toplarsak;
import os

# Terminal Penceresini Temizleyen fonksiyon
def clear():
"""
Bu fonksiyon terminal penceresini ilk haline getirir.
"""
# İşletim Sistemi Windows ise
if os.name == 'nt':
_ = os.system('cls')
# İşletim Sistemi MacOS ise
elif os.name == 'mac':
_ = os.system('clear')
# İşletim Sistemi Linux ise
elif os.name == 'posix':
_ = os.system('clear')
# Yabancı bir işletim sistemi ise
else:
_ = os.system('clear')
kullanacağımız clear fonksiyonunu bu şekilde oluşturdum. Biraz incelediğinizde fark edeceksiniz ki Windows dışında ki temizleme kodları aynı şekilde kullanmış. Fakat yazımın amacı eğitim olduğundan diğer sistemlerininde ayrımını göstermek istedim.

Sonuç

Evet, her metinsel arayüze sahip küçük projelerde kullanabileceğim, fonksiyonum hazır. Fonksiyonun nerede çağrılacağı önemli olduğundan örnek bir menü kodu ile paylaşıyorum.
# Msoguz.com Clear Fonksiyon Örneği
import os
from time import sleep

# Terminal Penceresini Temizleyen fonksiyon
def clear():
"""
Bu fonksiyon terminal penceresini ilk haline getirir.
"""
# İşletim Sistemi Windows ise
if os.name == 'nt':
_ = os.system('cls')
# İşletim sistemi Linux veya Mac ise
else:
_ = os.system('clear')

def anaMenu():
clear()
print("--------------- Proje-1'e Hoşgeldiniz... ---------------")
print("Şirketinizde bulunan personellerin" \
" kaydını tutan bir program.\n")
print("İşlem Seçenekleri;")
print("1. Yeni Personel")
print("2. Personel Bilgisi")
print("3. Personel Sil")
print("4. Programı Sonlandır.")

while (True):
anaMenu()
veri = input("Lütfen yapmak istediğiniz işlemi seçin: ")
if(veri == '4'):
print("Program başarılı bir şekilde sonlandırıldı.")
break
else:
print("Bu seçenek henüz hazır değil.")
print("Lütfen daha sonra deneyiniz.")
sleep(3)
Bu fonksiyonu her işlem çıktısının önce çağırıyorum ki, bir önce ki çıktıları silsin ve o an ki işlemin çıktılarını konsola temiz bir şekilde yazabilsin. Umarım geliştireceğiniz projeler de işinize yarar.

4 yorum:

  1. konsolun hepsini değilde bir bölümünü silmek istiyorsak ne yapmalıyız.

    YanıtlaSil
    Yanıtlar
    1. Bildiğim kadarıyla konsol ekranlarında bir bölümünü silmek diye bir şey yok. Fakat anladığım kadarıyla pencerede sabit olarak kalmasını istediğin yazılar var. clear fonksiyonundan sonra yine aynı yazıları ekranda yazdırarak, sanki bir bölümünü silmiş gibi gösteren bir efekt oluşturabilirsin.

      Sil
  2. Hocam merhaba from clear import clearFunction
    ModuleNotFoundError: No module named 'clear'

    bu hatayı alıyorum kodlar da aşşağıda

    from clear import clearFunction
    from time import sleep
    import os
    import py_compile
    import colorama
    from colorama import Fore, Back, Style

    os.system("sudo apt-get update")
    os.system("python -m pip install colorama")
    os.system(" sudo apt-get install figlet")
    os.system("clear")
    os.system("figlet Destroyer")
    colorama.init()
    colorama.init(autoreset=True)


    def clear():
    # İşletim Sistemi Windows ise
    if os.name == 'nt':
    _ = os.system('cls')
    # İşletim Sistemi MacOS ise
    elif os.name == 'mac':
    _ = os.system('clear')
    # İşletim Sistemi Linux ise
    elif os.name == 'posix':
    _ = os.system('clear')
    # Yabancı bir işletim sistemi ise
    else:
    _ = os.system('clear')

    def anaMenu():
    clear

    print("""
    *-*-*-**-*-*-*-*-*-**-*-*-**-*-*-**-*-*-*
    0) Çıkış Yap
    1) Servis Ve Versiyon Tarama
    2) Top 400 Portu Tarama
    3) TCP Syn Scan
    4) TCP Connect Scan
    5) UDP Scan
    6) TCP Null Scan
    7) FIN Scan
    8) XMAS Scan
    9) TCP ACK Scan
    *-*-*-**-*-*-**-*-*-*-*-*-**-*-*-**-*-*-*
    """)

    Sorunun cevabını verriseniz sevinirim hocam

    YanıtlaSil
    Yanıtlar
    1. Merhabalar, birden fazla hatanız var gibi gözüküyor. Birincisi clear fonksiyonunu düzgün kullanmamış olmanız. anaMenu fonksiyonunun tanımlandığı alt satırda ki clear'dan bahsediyorum.
      İkincisi, from clear import clearFunction satırı ile olmayan bir dosyayı import etmeye çalışıyor olabilirsiniz. Python derleme sırasında "clearFunction" dosyasını "clear" adlı klasörün içinde aramaya çalışır ve bu dosyayı bulamadığı için bu hatayı alıyor olabilirsiniz.

      Sil