Conrado Sol
- 29 Nis 2026
- 59 Mesaj
Aktiflik
Seviye
Deneyim
Merhaba arkadaşlar,
Birçoğumuz Python ile konsol tabanlı programlar yazdığımızda, yazdığımız uygulamanın göze hitap etmesini ve önemli kısımların renkli olmasını istiyoruz. Bu konuda CLI (Komut Satırı Arayüzü) deneyimini iyileştirecek birkaç temel biçimlendirme konusuna değineceğim. Konularımız şu şekilde olacak:
1. Terminal Üzerinde Renklendirme ve Biçimlendirme
Terminal üzerinde renklendirme ve biçimlendirme yapabilmek için ASCII (ANSI Escape) renk kodlarını kullanıyoruz. Bu kodlar genelde \033[96m şeklinde yazılır. İçerikteki 96 değerini bir değişken olarak düşünebilirsiniz; rengi ve biçimi bu sayılar belirler ve 0 ile 107 arasında bir değer alabilirler.
Basit bir döngü yazıp tüm renkleri ve biçimleri ekrana dökerek test edebiliriz:
Burada dikkat etmemiz gereken önemli noktalar var. Birincisi; bu biçimlendirme kodları string (karakter dizisi) olarak cümlenin başına eklenir. İkincisi ve en önemlisi; metin yazıldıktan sonra varsayılan değer olan 0 kodu (\033[0m) ile bu biçimlendirme mutlaka bitirilmelidir. Aksi takdirde terminalin geri kalanı da o renkte yazmaya devam eder.
Görüldüğü gibi ekrana biçimlendirilmiş olarak geldi. Daha basit bir gösterim yapalım, konu daha iyi pekişsin. Bu defa kod okunabilirliğini artırmak adına renkleri değişkenlere atayacağız:
Bu oldukça sade ve anlaşılır bir kullanım. Görüldüğü gibi biz "ConradoSol" kısmını yeşil yazmak istediğimiz için başına yesil adlı değişkeni ekledik. Daha sonraki kısımları normal renkte yazmak istediğimiz için diyerek varsayilan biçimlendirmeyi bitirdik. Oldukça basit. Tabii ki 0 kodunun varsayılan terminal sıfırlama kodu olduğunu unutmuyoruz.
2. Altı Çizili Metinler ve Arka Plan (Background) Renkleri
Şimdi de Metasploit gibi framework'lerde sıkça gördüğümüz altı çizili (underline) metinlerin nasıl yazıldığına bakalım. Yine kod skalasından görüyoruz ki altı çizili yazmak için 4 kodu gerekli. Deneyelim:
Evet, metinden önce kodu \033[4m olan alt_cizgi değişkenini ekleyince hemen ilgili yerin altı çizildi. Ben ayrıca renk de verdim, böylece daha göze hitap eden bir sonuç elde ettik.
Şimdi son olarak arka plana da renk verelim ve bu bölümü noktalayalım. Kod skalasında arka plana kırmızı rengini veren kodun 41 olduğunu öğrenmiştik. Bunu hemen bir değişkene aktardık ve küçük bir mantık sınaması yaptık:
Görüldüğü gibi kullanıma hazır. Benim size tavsiyem, projelerinizde bu kodları her seferinde baştan yazmak yerine bir Sınıf (Class) içerisine kaydetmenizdir. Örnek bir şablon:
3. Terminal Üzerinde Görünmez Şifre Girişi (getpass)
Şimdi de terminal üzerinde girdiğimiz şifrelerin arkadan izleyen biri tarafından görülmemesi için ne yapacağımıza bakalım. Bunu yapmak için Python'un yerleşik modüllerinden olan getpass'ı kullanıyoruz.
import getpass diyerek modülü projemize dahil ettik ve getpass.getpass() fonksiyonunu kullanarak kullanıcıdan veriyi aldık. Görüldüğü gibi, terminale şifreyi girdiğimiz halde ekranda hiçbir karakter gösterilmedi (tıpkı Linux sudo şifre girişlerinde olduğu gibi).
Not: Eski Windows sürümlerinde bu işlem için getpass.win_getpass() kullanılıyordu ancak güncel Python sürümlerinde standart getpass() fonksiyonu çapraz platform olarak (Windows/Linux/Mac) sorunsuz çalışmaktadır.
Kısa bir rehber oldu ama konsol tabanlı proje geliştiren birçok arkadaşımızın aklındaki soru işaretlerini gidermiştir diye düşünüyorum.
Kolay gelsin arkadaşlar, herkese iyi çalışmalar!
Birçoğumuz Python ile konsol tabanlı programlar yazdığımızda, yazdığımız uygulamanın göze hitap etmesini ve önemli kısımların renkli olmasını istiyoruz. Bu konuda CLI (Komut Satırı Arayüzü) deneyimini iyileştirecek birkaç temel biçimlendirme konusuna değineceğim. Konularımız şu şekilde olacak:
- Terminal üzerinde yazıları renklendirme
- Yazıları biçimlendirme (İtalik, kalın, altı çizili vs.)
- Terminal üzerinde görünmez şifre girişi
1. Terminal Üzerinde Renklendirme ve Biçimlendirme
Terminal üzerinde renklendirme ve biçimlendirme yapabilmek için ASCII (ANSI Escape) renk kodlarını kullanıyoruz. Bu kodlar genelde \033[96m şeklinde yazılır. İçerikteki 96 değerini bir değişken olarak düşünebilirsiniz; rengi ve biçimi bu sayılar belirler ve 0 ile 107 arasında bir değer alabilirler.
Basit bir döngü yazıp tüm renkleri ve biçimleri ekrana dökerek test edebiliriz:
Python:
for renk_kod in range(108):
print(f"\033[{renk_kod}m {renk_kod} - Format Denemesi \033[0m")
Burada dikkat etmemiz gereken önemli noktalar var. Birincisi; bu biçimlendirme kodları string (karakter dizisi) olarak cümlenin başına eklenir. İkincisi ve en önemlisi; metin yazıldıktan sonra varsayılan değer olan 0 kodu (\033[0m) ile bu biçimlendirme mutlaka bitirilmelidir. Aksi takdirde terminalin geri kalanı da o renkte yazmaya devam eder.
Görüldüğü gibi ekrana biçimlendirilmiş olarak geldi. Daha basit bir gösterim yapalım, konu daha iyi pekişsin. Bu defa kod okunabilirliğini artırmak adına renkleri değişkenlere atayacağız:
Kod:
yesil = "\033[92m"
varsayilan = "\033[0m"
print(f"{yesil}ConradoSol{varsayilan} Turkhacks!")
Bu oldukça sade ve anlaşılır bir kullanım. Görüldüğü gibi biz "ConradoSol" kısmını yeşil yazmak istediğimiz için başına yesil adlı değişkeni ekledik. Daha sonraki kısımları normal renkte yazmak istediğimiz için diyerek varsayilan biçimlendirmeyi bitirdik. Oldukça basit. Tabii ki 0 kodunun varsayılan terminal sıfırlama kodu olduğunu unutmuyoruz.
2. Altı Çizili Metinler ve Arka Plan (Background) Renkleri
Şimdi de Metasploit gibi framework'lerde sıkça gördüğümüz altı çizili (underline) metinlerin nasıl yazıldığına bakalım. Yine kod skalasından görüyoruz ki altı çizili yazmak için 4 kodu gerekli. Deneyelim:
Python:
alt_cizgi = "\033[4m"
yesil = "\033[92m"
varsayilan = "\033[0m"
print(f"Sisteme {alt_cizgi}{yesil}esf{varsayilan} yetkilisi giriş yaptı.")
Evet, metinden önce kodu \033[4m olan alt_cizgi değişkenini ekleyince hemen ilgili yerin altı çizildi. Ben ayrıca renk de verdim, böylece daha göze hitap eden bir sonuç elde ettik.
Şimdi son olarak arka plana da renk verelim ve bu bölümü noktalayalım. Kod skalasında arka plana kırmızı rengini veren kodun 41 olduğunu öğrenmiştik. Bunu hemen bir değişkene aktardık ve küçük bir mantık sınaması yaptık:
Python:
arka_kirmizi = "\033[41m"
varsayilan = "\033[0m"
komut = input("Komut girin: ")
if komut.startswith("run"):
print("Komut başarıyla uygulandı.")
else:
print(f"{arka_kirmizi} HATA: Böyle bir komut yok! {varsayilan}")
Görüldüğü gibi kullanıma hazır. Benim size tavsiyem, projelerinizde bu kodları her seferinde baştan yazmak yerine bir Sınıf (Class) içerisine kaydetmenizdir. Örnek bir şablon:
Python:
class Renkler:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
3. Terminal Üzerinde Görünmez Şifre Girişi (getpass)
Şimdi de terminal üzerinde girdiğimiz şifrelerin arkadan izleyen biri tarafından görülmemesi için ne yapacağımıza bakalım. Bunu yapmak için Python'un yerleşik modüllerinden olan getpass'ı kullanıyoruz.
Python:
import getpass
kullanici = input("Kullanıcı Adı: ")
sifre = getpass.getpass("Şifre: ")
print(f"Hoş geldin, {kullanici}. Sisteme giriş yapılıyor...")
import getpass diyerek modülü projemize dahil ettik ve getpass.getpass() fonksiyonunu kullanarak kullanıcıdan veriyi aldık. Görüldüğü gibi, terminale şifreyi girdiğimiz halde ekranda hiçbir karakter gösterilmedi (tıpkı Linux sudo şifre girişlerinde olduğu gibi).
Not: Eski Windows sürümlerinde bu işlem için getpass.win_getpass() kullanılıyordu ancak güncel Python sürümlerinde standart getpass() fonksiyonu çapraz platform olarak (Windows/Linux/Mac) sorunsuz çalışmaktadır.
Kısa bir rehber oldu ama konsol tabanlı proje geliştiren birçok arkadaşımızın aklındaki soru işaretlerini gidermiştir diye düşünüyorum.
Kolay gelsin arkadaşlar, herkese iyi çalışmalar!
