Python Programlarını Kaydetmek¶
Özellikle küçük kod parçaları yazıp bunları denemek için Python komut satırı mükemmel bir ortamdır. Ancak kodlar çoğalıp büyümeye başlayınca komut satırı yetersiz gelmeye başlayacaktır. Üstelik tabii ki yazdığınız kodları bir yere kaydedip saklamak isteyeceksiniz. İşte burada metin düzenleyiciler devreye girecek.
Python kodlarını yazmak için istediğiniz herhangi bir metin düzenleyiciyi kullanabilirsiniz. Hatta Notepad bile olur. Ancak Python kodlarını ayırt edip renklendirebilen bir metin düzenleyici ile yola çıkmak her bakımdan hayatınızı kolaylaştıracaktır.
Biz bu bölümde farklı işletim sistemlerinde, metin düzenleyici kullanılarak Python programlarının nasıl yazılacağını tek tek inceleyeceğiz. Daha önce de söylediğimiz gibi, hangi işletim sistemini kullanıyor olursanız olun, hem Windows hem de GNU/Linux başlığı altında yazılanları okumanızı tavsiye ederim.
Dilerseniz önce GNU/Linux ile başlayalım:
GNU/Linux Sistemi¶
Eğer kullandığınız sistem GNU/Linux’ta KDE masaüstü ortamı ise başlangıç düzeyi için Kwrite veya Kate adlı metin düzenleyicilerden herhangi biri yeterli olacaktır. Şu aşamada kullanım kolaylığı ve sadeliği nedeniyle Kwrite önerilebilir.
Eğer kullandığınız sistem GNU/Linux’ta GNOME masaüstü ortamı ise Gedit’i kullanabilirsiniz.
İşe yeni bir Kwrite belgesi açarak başlayalım. Yeni bir Kwrite belgesi açmanın en kolay yolu ALT+F2 tuşlarına basıp, çıkan ekranda:
kwrite
yazmaktır.
Yeni bir Gedit belgesi oluşturmak için ise ALT+F2 tuşlarına basıp:
gedit
komutunu veriyoruz.
Boş Kwrite veya Gedit belgesi karşımıza geldikten sonra ilk yapmamız gereken, ilk satıra:
#!/usr/bin/env python
yazmak olacaktır. Peki bu komut ne işe yarıyor?
Bu komut, biraz sonra yazacağımız kodların birer Python kodu olduğunu ve Python’ın da sistemde hangi konumda yer aldığını gösteriyor. Böylece sistemimiz Python’ı nerede bulması gerektiğini anlıyor.
GNU/Linux sistemlerinde Python’ın çalıştırılabilir dosyası genellikle /usr/bin dizini altındadır. Dolayısıyla yukarıdaki satırı aslında şöyle de yazabilirsiniz:
#!/usr/bin/python
Böylece sisteminiz Python’ı /usr/bin dizini altında arayacak ve yazdığınız programı Python’la çalıştırması gerektiğini anlayacaktır. Ancak bazı GNU/Linux sistemlerinde Python’ın çalıştırılabilir dosyası başka bir dizinin içinde de olabilir (Mesela /usr/local/bin). Bu durumda, çalıştırılabilir dosya /usr/bin altında bulunamayacağı için, bazı koşullarda sistem yazdığınız programı çalıştıramayacaktır. Python’ın çalıştırılabilir dosyasının her sistemde aynı dizin altında bulunmama ihtimalinden ötürü yukarıdaki gibi sabit bir dizin adı vermek iyi bir fikir olmayabilir. Bu tür sistem farklılıklarına karşı önlem olarak GNU/Linux sistemlerindeki env adlı bir betikten yararlanabiliriz. /usr/bin dizini altında bulunduğunu varsayabileceğimiz bu env betiği Python’ın sistemde hangi dizin içinde olduğunu bulmamızı sağlar. Böylece yazdığımız bir programın, Python’ın /usr/bin dizini haricinde bir konuma kurulduğu sistemlerde çalıştırılması konusunda endişe etmemize gerek kalmaz. Programımızın en başına eklediğimiz #/usr/bin/env python satırı sayesinde Python sistemde nereye kurulmuş olursa olsun kolaylıkla tespit edilebilecektir.
Uzun lafın kısası, #!/usr/bin/python yazdığımızda sisteme şu emri vermiş oluyoruz: “Python’ı /usr/bin dizini içinde ara!“
#!/usr/bin/env python yazdığımızda ise şu emri: “Python’ı nereye saklandıysa bul!“
Neyse... Biz daha fazla teknik ayrıntıya dalmadan yolumuza devam edelim.
Aslında metin içine kod yazmak, Python komut satırına kod yazmaktan çok farklı değildir. Şimdi aşağıda verilen satırları Kwrite veya Gedit belgesinin içine ekleyelim:
#!/usr/bin/env python
a = "elma"
b = "armut"
c = "muz"
print "bir", a, "bir", b, "bir de", c, "almak istiyorum"
Bunları yazıp bitirdikten sonra sıra geldi dosyamızı kaydetmeye. Şimdi dosyamızı deneme.py adıyla herhangi bir yere kaydediyoruz. Gelin biz masaüstüne kaydedelim dosyamızı. Şu anda masaüstünde deneme.py adında bir dosya görüyor olmamız lazım. Şimdi hemen bir konsol ekranı açıyoruz. (Ama Python komut satırını çalıştırmıyoruz.) Şu komutu vererek, masaüstüne, yani dosyayı kaydettiğimiz yere geliyoruz:
cd Desktop
Tabii burada ben sizin ev dizininde olduğunuzu varsaydım. Komut satırını ilk başlattığınızda içinde bulunduğunuz dizin ev dizininiz olacaktır (/home/kullanici_adi). Dolayısıyla yukarıda gösterdiğimiz cd Desktop komutu sizi masaüstünün olduğu dizine götürür. Tabii eğer siz komut satırını farklı bir dizin içinde açmışsanız tek başına yukarıdaki komutu vermeniz sizi masaüstüne götürmez. Öyle bir durumda, şuna benzer bir komut vermeniz gerekir:
cd /home/kullanici_adi/Desktop
Not
Bazı Türkçe GNU/Linux sistemlerinde masaüstünü gösteren dizin “Desktop” yerine “Masaüstü” adını da taşıyabilmektedir. Öyle ise tabii ki vereceğiniz komutta “Desktop” kelimesini “Masaüstü” kelimesiyle değiştirmeniz gerekir.
Eğer başarıyla masaüstüne gelmişseniz, yazdığınız programı çalıştırmak için şu komutu verip ENTER tuşuna basın:
python deneme.py
Eğer her şey yolunda gitmişse şu çıktıyı almamız lazım:
bir elma, bir armut, bir de muz almak istiyorum
GNOME kullanıcıları da yukarıda anlatılan işlemleri takip ederek ve Kwrite yerine Gedit adlı metin düzenleyiciyi kullanarak dosyayı kaydedip çalıştırabilir.
Gördüğünüz gibi, python deneme.py komutuyla programlarımızı çalıştırabiliyoruz. Normal şartlar altında tercih edeceğimiz program çalıştırma biçimi de bu olacaktır. Peki, ama acaba Python programlarını başa python komutu eklemeden çalıştırmanın bir yolu var mı? İşte burada biraz önce bahsettiğimiz #!/usr/bin/env python satırının önemi ortaya çıkıyor.
Başa python komutu getirmeden programımızı çalıştırabilmek için öncelikle programımıza çalıştırma yetkisi vermemiz gerekiyor. Bunu şu komut yardımıyla yapıyoruz:
Öncelikle:
cd Desktop
komutuyla dosyayı kaydettiğimiz yer olan masaüstüne geliyoruz. Bunun ardından:
chmod a+x deneme.py
komutuyla da deneme.py adlı dosyaya çalıştırma yetkisi veriyoruz, yani dosyayı çalıştırılabilir (executable) bir dosya haline getiriyoruz.
Artık komut satırında şu komutu vererek programımızı çalıştırabiliriz:
./deneme.py
Peki, tüm bu işlemlerin #!/usr/bin/env python satırıyla ne ilgisi var?
Eğer bu satırı metne yerleştirmezsek, sistem bu betiği hangi programla çalıştırması gerektiğini anlayamayacağı için ./deneme.py komutu çalışmayacaktır. python deneme.py komutunu verdiğimizde, betiği Python programının çalıştıracağı anlaşılıyor. Ancak baştaki “python” ifadesini kaldırdığımızda, eğer betiğin ilk satırında #!/usr/bin/env python da yoksa, sistem bu betikle ne yapması gerektiğine karar veremez.
Eğer bu satırı #!/usr/bin/python şeklinde yazarsanız ve eğer programınızın çalıştırıldığı sistemde Python’ın çalıştırılabilir dosyası /usr/bin/ dizini altında değilse şuna benzer bir hata çıktısı alırsınız:
bash: ./deneme.py: /usr/bin/python: bad interpreter: No such file or directory
Böyle bir hata almamak için o satırı #!/usr/bin/env python şeklinde yazmaya özen gösteriyoruz. Böylece Python nereye kurulmuş olursa olsun sistemimiz Python’ı tespit edebiliyor.
Yukarıdaki işlemlerden sonra bu deneme.py dosyasının isminin sonundaki .py uzantısını kaldırıp,
./deneme
komutuyla da programımızı çalıştırabiliriz.
Ya biz programımızı sadece ismini yazarak çalıştırmak istersek ne yapmamız gerekiyor?
Bunu yapabilmek için programımızın PATH değişkeni içinde yer alması, yani Türkçe ifade etmek gerekirse, programın YOL üstünde olması gerekir. Peki, bir programın YOL üstünde olması ne demek?
Bilindiği gibi, bir programın veya dosyanın yolu, kabaca o programın veya dosyanın içinde yer aldığı dizindir. Örneğin fstab dosyasının yolu /etc/fstab‘dır. Başka bir örnek vermek gerekirse, xorg.conf dosyasının yolu /etc/X11/xorg.conf‘tur. Bu “yol” kelimesinin bir de daha özel bir anlamı bulunur. Bilgisayar dilinde, çalıştırılabilir dosyaların (.bin ve .sh dosyaları çalıştırılabilir dosyalardır) içinde yer aldığı dizinlere de özel olarak YOL adı verilir ve bu anlamda kullanıldığında “yol” kelimesi genellikle büyük harfle yazılır.
İşletim sistemleri, bir programı çağırdığımızda, söz konusu programı çalıştırabilmek için bazı özel dizinlerin içine bakar. Çalıştırılabilir dosyalar eğer bu özel dizinler içinde iseler, işletim sistemi bu dosyaları bulur ve çalıştırılmalarını sağlar. Böylece biz de bu programları doğrudan isimleriyle çağırabiliriz. Şimdi bu konuyu daha iyi anlayabilmek için birkaç deneme yapalım. Hemen bir konsol ekranı açıp şu komutu veriyoruz:
echo $PATH
Bu komutun çıktısı şuna benzer bir şey olacaktır:
/usr/local/sbin:/usr/local/bin:/usr/sbin:
/usr/bin:/sbin:/bin:/usr/games
Bu çıktı bize YOL değişkeni (İngilizce’de PATH variable) dediğimiz şeyi gösteriyor. İşletim sistemimiz, bir programı çağırmak istediğimizde öncelikle yukarıda adı verilen dizinlerin içini kontrol edecektir. Eğer çağırdığımız programın çalıştırılabilir dosyası bu dizinlerden herhangi birinin içinde ise o programı ismiyle çağırabiliyoruz.
Örneğin;
which gedit
komutunun çıktısına bir bakalım:
/usr/bin/gedit
Gördüğünüz gibi Gedit programının YOL’u /usr/bin/gedit. Hemen yukarıda echo $PATH komutunun çıktısını kontrol ediyoruz ve görüyoruz ki /usr/bin/ dizini YOL değişkenleri arasında var. Dolayısıyla, Gedit programı YOL üstündedir, diyoruz. Zaten Gedit programının YOL üstünde olması sayesinde, konsolda sadece gedit komutunu vererek Gedit programını çalıştırabiliyoruz.
Şimdi eğer biz de yazdığımız programı doğrudan ismiyle çağırabilmek istiyorsak programımızı echo $PATH çıktısında verilen dizinlerden birinin içine kopyalamamız gerekiyor. Mesela programımızı /usr/bin içine kopyalayalım. Tabii ki bu dizin içine bir dosya kopyalayabilmek için root yetkilerine sahip olmalısınız. Şu komut işinizi görecektir:
sudo cp Desktop/deneme /usr/bin
Şimdi konsol ekranında:
deneme
yazınca programımızın çalıştığını görmemiz lazım.
Program dosyamızı YOL üstünde bulunan dizinlerden birine eklemek yerine, dosyamızın içinde bulunduğu dizini YOL’a eklemek de mümkün. Şöyle ki:
PATH=$PATH:$HOME/Desktop
Bu şekilde masaüstü dizinini YOL’a eklemiş olduk. İsterseniz;
echo $PATH
komutuyla masaüstünüzün YOL üstünde görünüp görünmediğini kontrol edebilirsiniz. Bu sayede artık masaüstünde bulunan çalıştırılabilir dosyalar da kendi adlarıyla çağrılabilecekler. Ancak masaüstünü YOL’a eklediğinizde, masaüstünüz hep YOL üstünde kalmayacak, mevcut konsol oturumu kapatılınca her şey yine eski haline dönecektir. Eğer herhangi bir dizini kalıcı olarak YOL’a eklemek isterseniz, .profile dosyanızda değişiklik yapmanız gerekir. Mesela masaüstünü YOL’a eklemek için /home/kullanici_adi/.profile dosyanızın en sonuna şu satırı eklemelisiniz:
export PATH=$PATH:$HOME/Desktop
Yoruldunuz mu? Yoksa sıkıldınız mı? Bence ne yorulun, ne de sıkılın... Çünkü bu bölümde verdiğimiz bilgiler, Python’la bir program yazıp bu programı, kullandığınız dağıtımın KDE veya GNOME menüsüne eklemek istediğinizde işinize çok yarayacaktır. Eğer GNU/Linux altında herhangi bir programlama faaliyetinde bulunmak istiyorsanız yukarıda verdiğimiz bilgileri özümsemeniz gerekir.
Gelelim Windows kullanıcılarına...
Windows Sistemi¶
Windows kullanıcıları IDLE adlı metin düzenleyici ile çalışabilirler. IDLE’a ulaşmak için Başlat/Programlar/Python/IDLE (Python GUI) yolunu takip ediyoruz. IDLE ilk başlatıldığında şöyle bir görünüme sahip olacaktır:
Burada gördüğümüz >>> işaretinden de anlayabileceğimiz gibi, bu ekran aslında Python’ın etkileşimli kabuğunun ta kendisidir... Dilerseniz, etkileşimli kabukta yapacağınız işlemleri bu ekranda da yapabilirsiniz. Ama şu anda bizim amacımız etkileşimli kabukla oynamak değil. Biz Python programlarımızı yazabileceğimiz bir metin düzenleyici arıyoruz.
Burada File menüsü içindeki New Window düğmesine tıklayarak aşağıdaki ekrana ulaşıyoruz:
İşte Python kodlarını yazacağımız yer burası. Şimdi bu boş sayfaya şu kodları ekliyoruz:
a = "elma"
b = "armut"
c = "muz"
print "bir", a, "bir", b, "bir de", c, "almak istiyorum"
Kodlarımızı yazdıktan sonra yapmamız gereken şey dosyayı bir yere kaydetmek olacaktır. Bunun için File/Save as yolunu takip ederek dosyayı deneme.py adıyla masaüstüne kaydediyoruz. Dosyayı kaydettikten sonra Run/Run Module yolunu takip ederek veya doğrudan F5 tuşuna basarak yazdığımız programı çalıştırabiliriz. Bu durumda şöyle bir görüntü elde ederiz:
Eğer programınızı doğrudan komut satırını kullanarak çalıştırmak isterseniz şu işlemleri yapın:
- Başlat/Çalıştır yolunu takip edip, açılan pencereye “cmd” yazın ve ENTER tuşuna basın.
- Şu komutu vererek, masaüstüne, yani dosyayı kaydettiğiniz yere gelin:
cd Desktop
Windows’ta komut satırı ilk açıldığında C:\Documents and Settings\kullanici_adi gibi bir dizinin içinde olacaksınız. Dolayısıyla yukarıda gösterdiğimiz cd Desktop komutu sizi masaüstünün olduğu dizine götürecektir. Tabii eğer siz komut satırını farklı bir dizin içinde açmışsanız tek başına yukarıdaki komutu vermeniz sizi masaüstüne götürmez. Öyle bir durumda şuna benzer bir komut vermeniz gerekir:
cd C:/Documents and Settings/Kullanici_adi/Desktop
Masaüstüne geldikten sonra şu komutu vererek programınızı çalıştırabilirsiniz:
python deneme.py
Tabii ben burada sizin daha önce anlattığımız şekilde Python’ı YOL’a eklediğinizi varsaydım. Eğer Python’ı YOL’a eklemediyseniz programınızı çalıştırmak için şu yöntemi de kullanabilirsiniz:
c:/python26/python deneme.py
Eğer her şey yolunda gitmişse şu çıktıyı almamız lazım:
bir elma bir armut bir de muz almak istiyorum
Gördüğünüz gibi gayet basit.
Bu arada birkaç defadır “YOL” diye bir şeyden söz ediyoruz. Hatta geçen bölümde Python’ı nasıl YOL’a ekleyeceğimizi de öğrendik. Peki ama nedir bu YOL denen şey? Dilerseniz biraz bu konuyu inceleyelim. Zira ileride bir Python programı yazıp bu programı kullanıcılarınıza sunmak istediğinizde bu bilgiler çok işinize yarayacak:
Bir programın veya dosyanın yolu, kabaca o programın veya dosyanın içinde yer aldığı dizindir. Örneğin Internet Explorer programının yolu C:\Program Files\Internet Explorer\iexplore.exe‘dir. Dolayısıyla şu komutu vererek IE’yi komut satırından başlatabilirsiniz:
"C:\Program Files\Internet Explorer\iexplore.exe"
Başka bir örnek vermek gerekirse, hosts dosyasının yolu C:\WINDOWS\system32\drivers\etc\hosts‘tur. Dolayısıyla bu dosyanın içeriğini görüntülemek için şu komutu verebilirsiniz:
notepad "C:\WINDOWS\system32\drivers\etc\hosts"
Python’ın yolu ise C:\Python26\python.exe‘dir. Dolayısıyla Python’ı çalıştırmak için şu komutu verebiliyoruz:
C:\Python26\python.exe
Bu “yol” kelimesinin bir de daha özel bir anlamı bulunur. Bilgisayar dilinde, çalıştırılabilir dosyaların (.exe dosyaları çalıştırılabilir dosyalardır) içinde yer aldığı dizinlere de özel olarak YOL adı verilir ve bu anlamda kullanıldığında “yol” kelimesi genellikle büyük harfle yazılır.
İşletim sistemleri, bir programı çağırdığımızda, söz konusu programı çalıştırabilmek için bazı özel dizinlerin içine bakar. Çalıştırılabilir dosyalar eğer bu özel dizinler içinde iseler, işletim sistemi bu dosyaları bulur ve çalıştırılmalarını sağlar. Böylece biz de bu programları doğrudan isimleriyle çağırabiliriz. Şimdi bu konuyu daha iyi anlayabilmek için birkaç deneme yapalım. Başlat/Çalıştır yolunu takip edip, açılan pencerede cmd komutunu vererek MS-DOS’u başlatalım ve orada şöyle bir komut yazalım:
echo %PATH%
Bu komutun çıktısı şuna benzer bir şey olacaktır:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
Bu çıktı bize YOL değişkeni (İngilizce’de PATH variable) dediğimiz şeyi gösteriyor. İşletim sistemimiz, bir programı çağırmak istediğimizde öncelikle yukarıda adı verilen dizinlerin içini kontrol edecektir. Eğer çağırdığımız programın çalıştırılabilir dosyası bu dizinlerden herhangi birinin içinde ise o programı ismiyle çağırabiliyoruz.
Not
YOL dizinlerinin birbirlerinden noktalı virgül ile ayrıldığına dikkat edin! Dolayısıyla, YOL’a yeni bir dizin eklemek isterseniz, sizin de bu dizini önceki dizinden noktalı virgül ile ayırmanız gerekir.
Örneğin notepad.exe C:\Windows dizini altında bulunan bir programdır. Bu dizin, YOL üstünde yer aldığı için, Notepad programını doğrudan ismiyle çağırabiliriz. Komut satırında notepad komutunu vererek bunu kendiniz de test edebilirsiniz. Aynı şekilde calc.exe de C:\Windows\System32 klasörü altında bulunan bir programdır. Bu klasör de YOL üstünde olduğu için, Calc programını doğrudan ismiyle çağırabiliyoruz...
Şimdi eğer biz de yazdığımız programı doğrudan ismiyle çağırabilmek istiyorsak programımızı echo %PATH% çıktısında verilen dizinlerden birinin içine kopyalamamız gerekiyor. Mesela programımızı C:\Windows dizini içine kopyalayalım.
Şimdi komut satırında:
deneme.py
yazınca programımızın çalıştığını görmemiz lazım.
Program dosyamızı YOL üstünde bulunan dizinlerden birine eklemek yerine, dosyamızın içinde bulunduğu dizini YOL’a eklemek de mümkün. Bunun için MS-DOS’ta şöyle bir komut vermemiz gerekiyor:
PATH=%PATH%;%USERPROFILE%\Desktop
Bu şekilde masaüstü dizinini YOL’a eklemiş olduk. İsterseniz;
echo %PATH%
komutuyla masaüstünüzün YOL üstünde görünüp görünmediğini kontrol edebilirsiniz. Bu sayede artık masaüstünde bulunan çalıştırılabilir dosyalar da kendi adlarıyla çağrılabilecekler. Ancak masaüstünü YOL’a eklediğinizde, masaüstünüz hep YOL üstünde kalmayacak, mevcut MS-DOS oturumu kapatılınca her şey yine eski haline dönecektir. Eğer masaüstü dizinini kalıcı olarak YOL’a eklemek isterseniz, daha önce gösterdiğimiz şekilde, bu dizini Sistem Değişkenleri içindeki PATH listesine yazmanız gerekir.
Burada hemen şöyle bir soru akla geliyor: Notepad ve Calc gibi programları, hiç .exe uzantısını belirtmeden doğrudan isimleriyle çağırabildik. Ama mesela deneme.py adlı programımızı çalıştırabilmek için .py uzantısını da belirtmemiz gerekti. Peki bu durumun nedeni nedir?
Windows’ta PATHEXT adlı özel bir değişken vardır. Bu değişken, sistemin çalıştırılabilir kabul ettiği uzantıları tutar. Şu komutu verelim:
echo %PATHEXT%
Buradan şu çıktıyı alıyoruz:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
Windows’ta eğer bir program yukarıda görülen uzantılardan birine sahipse çalıştırılabilir olarak kabul edilecektir. Gördüğünüz gibi, .exe de bu uzantılardan biri. Dolayısıyla bu uzantıya sahip bir dosyayı, uzantısını belirtmeden de çağırabiliyoruz. Eğer isterseniz bu listeye .py uzantısını da ekleyebilirsiniz. Bunun için şu işlemleri yapabilirsiniz:
- Denetim Masasında “Sistem” simgesine çift tıklayın.
- “Gelişmiş” sekmesine girin ve “Ortam Değişkenleri” düğmesine basın.
- “Sistem Değişkenleri” bölümünde “PATHEXT” öğesini bulup buna çift tıklayın.
- En son girdi olan .WSH‘den sonra ”;.PY” girdisini ekleyin.
- TAMAM’a basıp çıkın.
Böylece artık .py uzantılı dosyaları da, uzantı belirtmeden çalıştırabilirsiniz...
Şimdiye kadar bir Python programını nasıl yazacağımızı ve IDLE’ı ya da MS-DOS’u kullanarak bu programı nasıl çalıştıracağımızı öğrendik. Peki yazdığımız bir programı çift tıklayarak çalıştıramaz mıyız? Elbette çalıştırabiliriz.
Python Windows’a kurulurken kendini kütüğe (Registry) kaydeder. Dolayısıyla Windows Python programlarını nasıl çalıştırması gerektiğini bilir. Hatta bu sayede Windows üzerinde yazdığımız Python programlarını, programın bulunduğu dizin içinde sadece ismini kullanarak çalıştırmamız da mümkündür. Yani yazdığımız programı masaüstüne kaydettiğimizi varsayarsak ve şu komutla da masaüstüne geldiğimizi düşünürsek:
cd C:/Documents and Settings/Kullanici_adi/Desktop
Masaüstüne geldikten sonra şu komutu vererek programınızı çalıştırma imkanına sahibiz:
deneme.py
Ancak bu komutun işe yarayabilmesi için, MS-DOS’ta o anda programın bulunduğu dizin içinde olmamız gerek. Yani eğer programınız Belgelerim dizini içinde ise ve siz de MS-DOS’ta C:/Documents and Settings/Kullanici_adi/Desktop dizini altındaysanız bu komut bir işe yaramayacaktır. Yazdığınız programı konum farketmeksizin her yerden çağırabilmek istiyorsanız, programınızı biraz önce anlattığımız şekilde YOL’a eklemelisiniz... Neyse... Biz şimdi tekrar konumuza dönelim.
Ne diyorduk? Evet, yazdığımız programları çift tıklayarak çalıştıramaz mıyız? Tabii ki çalıştırabiliriz. Python Windows’a kurulurken kendini kütüğe kaydettiği için, yazdığımız .py uzantılı dosyaya çift tıkladığımızda programımız çalışacaktır. Ancak burada şöyle bir problem var. Dosyamıza çift tıkladığımızda programımız çalışır çalışmasına, ama bu işlem o kadar hızlı olup biter ki, biz sadece arkada son hızla siyah bir komut satırının açılıp kapandığını görürüz... Aslında programımız çalışıyor, ama çok hızlı bir şekilde çalışıp sona erdiği için biz programımızın çalıştığını göremiyoruz. Programımızın çalıştığını görebilmemiz için o siyah komut satırının kapanmasına engel olmamız gerekir. Bunu da, programımızın en son satırına şu ilaveyi yaparak hallediyoruz:
raw_input()
Yani kodlarımız şöyle görünmeli:
a = "elma"
b = "armut"
c = "muz"
print "bir", a, "bir", b, "bir de", c, "almak istiyorum"
raw_input()
Son satıra eklediğimiz bu raw_input() ifadesinin ne olduğunu ve tam olarak ne işe yaradığını birkaç bölüm sonra inceleyeceğiz. Şimdilik siz sadece bu satırın, MS-DOS’un kapanmasını engellediğini bilin. Bu komut sayesinde MS-DOS siz ENTER tuşuna basana kadar açık kalacaktır...
Ancak bu noktada çok önemli bir uyarı yapmamız gerekiyor. Python’la bir program geliştirirken, programlarınızı çalıştırmak için asla bu çift tıklama yöntemini kullanmayın. Programlarınızı her zaman komut satırından çalıştırın. Böylece, eğer programınızda bir hata varsa, bu hatanın nereden kaynaklandığını anlayabilirsiniz. Ama eğer programınızı çift tıklayarak çalıştırırsanız hatayı görme şansınız olmaz. Buna bir örnek verelim.
Diyelim ki bir üçgenin alanını hesaplayan bir program yazacaksınız. Bir üçgenin alan formülü şudur:
alan = taban x (yukseklik / 2)
Kodlarımız şöyle olmalı:
yukseklik = 4
taban = 6
alan = taban * (yukseklik / 2)
print alan
Burada yaptığımız şey şu:
- Öncelikle yukseklik adlı bir değişken tanımladık. Bu değişkenin değeri 4
- Ardından taban adlı başka bir değişken daha tanımladık. Bu değişkenin değeri ise 6
- Üçgenin alanını hesaplamamızı sağlayan formülümüzü yazıyoruz: alan = taban * (yukseklik / 2)
- Son olarak da alan adlı değişkenin değerini print komutu yardımıyla ekrana çıktı olarak veriyoruz.
- Bu programı çalıştırdığımızda alacağımız sonuç 12 olacaktır...
Şimdi şöyle bir düşünün. Diyelim ki biz bu programı yazarken ufak bir hata yaptık ve şöyle bir şey çıkardık ortaya:
yukseklik = 4
taban = 6
ala = taban * (yukseklik / 2)
print alan
Eğer bu programı çift tıklayarak çalıştırırsanız, programdaki hatanın nereden kaynaklandığını anlayamazsınız. Çünkü MS-DOS ekranı son hızla açılıp kapanacaktır. Üstelik son satıra raw_input() eklemeniz de hiç bir işe yaramaz. Bu satır sadece hatasız programların çift tıklanarak çalışmasını sağlar. Çünkü Python kodları yukarıdan aşağıya doğru okur. Bir hatayla karşılaştığında da kodların geri kalanını okumadan programdan çıkar. Dolayısıyla, raw_input() satırından önce bir hata varsa, Python bu satıra ulaşamadan programı kapatacak, bu sebeple MS-DOS satırının kapanmasını önleyen kod hiçbir zaman çalışmamış olacaktır...
Ama eğer aynı programı komut satırından çalıştırmayı denerseniz hatanın nereden kaynaklandığı konusunda bir fikir edinebilirsiniz. Bu program şöyle bir hata verecektir:
Traceback (most recent call last):
File "deneme.py", line 6, in <module>
print alan
NameError: name 'alan' is not defined
Bu hata bize, “alan” diye bir şeyin tanımlanmadığını söylüyor. Kodlarımıza dikkatli bakınca görüyoruz ki, hakikaten “alan” diye bir değişken tanımlamamışız. Çünkü formülde “alan” yazacağımıza yanlışlıkla “ala” yazmışız!
Böylece bir bölümü daha bitirmiş olduk. Yalnız bu noktada şu hatırlatmayı yapmadan geçmeyelim. Yukarıda verdiğimiz bilgiler son derece önemlidir. Sadece Python’la değil, hangi dille programlama yapıyor olursanız olun, yukarıda anlattığımız şeyleri özümsemiş olmalısınız. İyi bir programcı, üzerinde program geliştireceği işletim sistemini yakından tanımalıdır.
Türkçe Karakter Kullanımı¶
Şimdiye dek Python hakkında epey bilgi edindik. Dilerseniz elimizi alıştırmak için santigratı fahrenhayta çeviren bir betik yazalım ve neler olduğuna bakalım:
santigrat = 22
fahrenhayt = santigrat * (9.0/5.0) + 32
print "%s santigrat derece %s fahrenhayta \
karşılık gelir." %(santigrat, fahrenhayt)
Bu programı çalıştırdığınızda biraz hayal kırıklığına uğramış olabilirsiniz. Çünkü yukarıdaki kodlar şuna benzer bir hata mesajı almanıza sebep olacaktır:
File "deneme.py", line 6
SyntaxError: Non-ASCII character '\xc5' in file deneme.py
on line 6, but no encoding declared; see
http://www.python.org/peps/pep-0263.html for details
Bu hata mesajını almamızın nedeni, programımız içinde kullandığımız “ı, ş” gibi Türkçe karakterler. Python yazdığımız kodlar içindeki bu Türkçe karakterler nedeniyle bize bu hata mesajını gösterecektir. Böyle bir hata mesajı almamak için kodlarımızın arasına şu satırı eklememiz gerekir:
# -*- coding: utf-8 -*-
Windows kullanıcıları ise utf-8 yerine cp1254 adlı karakter kodlamasını kullanmayı tercih edebilir:
# -*- coding: cp1254 -*-
Böylelikle kullandığımız karakter tipini Python’a tanıtmış oluyoruz. İlerde ascii, unicode ve Python konusunu işlerken Python’ın Türkçe karakterlere neden böyle davrandığını inceleyeceğiz. Ama siz şimdilik bu konuyu çok fazla dert edinmeyin.
Programımızın en son hali şöyle olacak:
# -*- coding: utf-8 -*-
santigrat = 22
fahrenhayt = santigrat * (9.0/5.0) + 32
print "%s santigrat derece %s fahrenhayta \
karşılık gelir." %(santigrat, fahrenhayt)
Gördüğünüz gibi bu defa programımız Türkçe karakterleri düzgün bir şekilde gösterebildi. Bu arada isterseniz yukarıdaki kodları biraz inceleyelim:
Burada öncelikle # -*- coding: utf-8 -*- satırını yazdık. Bu satır sayesinde kullanacağımız kodlama biçimini Python’a tanıtmış olduk. Böylece kodlarımız içinde Türkçe karakter kullanabileceğiz. Bu satırın Windows’ta -*- coding: cp1254 -*- biçimini alacağını biliyorsunuz.
Ardından santigrat adlı bir değişken tanımladık ve bu değişkenin değerini 22 olarak belirledik.
Daha sonra da fahrenhaytı santigrata çevirebilmek için gereken formülümüzü yazdık. Formülde 9/5 yerine 9.0/5.0 yazdığımıza dikkat edin. Böylece 9 sayısını 5 sayısına hassas bir şekilde bölebilmiş olduk. Aksi halde formülümüz sonucu hatalı hesaplayacaktır.
Son olarak da 22 santigrat derecenin kaç fahrenhayta karşılık geldiğini düzgün bir cümle halinde kullanıcıya gösterdik. Burada karakter dizisini nasıl biçimlendirdiğimize dikkat edin.
IDLE üzerinde çalışan Windows kullanıcıları bu programı # -*- coding: cp1254 -*- satırını yazmadan kaydetmeye çalıştıklarında şöyle bir uyarı penceresiyle karşılaşacaklar:
IDLE, karakter kodlamasını belirtmeniz konusunda sizi uyarıyor. Eğer burada “Edit My File” düğmesine basacak olursanız, IDLE programınızın ilk satırına sizin yerinize # -*- coding: cp1254 -*- komutunu ekleyecektir...
Yukarıdaki kodlarda dikkat etmemiz gereken başka bir nokta da kodları nasıl böldüğümüzdür. Daha önceki derslerimizde de bahsettiğimiz gibi Python’da kodların görünümü de önem taşır. Kodların çirkin bir şekilde sağa doğru uzamasını engellemek amacıyla “\” kaçış dizisini kullanarak kodlarımızı alt satıra kaydırdık. Eğer arzu ederseniz, yukarıdaki kodları şu şekilde de bölebilirsiniz:
# -*- coding: cp1254 -*-
santigrat = 22
fahrenhayt = santigrat * (9.0/5.0) + 32
print ("%s santigrat derece %s fahrenhayta karşılık gelir."
%(santigrat, fahrenhayt))
Burada kullandığımız bölme biçimine çok dikkat edin. Burada karakter dizisinin tamamını parantez içine aldık:
print ("%s santigrat derece %s fahrenhayta karşılık gelir."
%(santigrat, fahrenhayt))
Yalnız bu yöntemi, bir karakter dizisini ortadan bölmek için kullanamazsınız. Bu yöntemi kullanabilmeniz için “%s” işaretlerinin kullanıldığı bir kodla karşı karşıya olmanız ve satırı “%” işaretinden bölmeniz gerekir. Yani şu kullanımlar yanlıştır:
print ("Ben çok uzun bir karakter dizisiyim. O yüzden
iki satıra bölünmem gerekir.")
veya:
print ("%s santigrat derece %s fahrenhayta
karşılık gelir."%(santigrat, fahrenhayt))
Python satır bölme konusunda pek çok alternatif sunar. Hatta şöyle bir şey dahi yapmanıza izin verir. Dikkatlice inceleyin:
print ("Ben çok uzun bir karakter dizisiyim. O yüzden"
" iki satıra bölünmem gerekir.")
ya da:
print ("%s santigrat derece %s fahrenhayta"
" karşılık gelir."%(santigrat, fahrenhayt))
Aslında şu son iki yöntemi biliyor olmanız lazım. Hatırlarsanız ilk derslerimizde karakter dizilerini birleştirmeyi öğrenirken şöyle bir örnek vermiştik:
>>> print "İstanbul " "Çeliktepe"
Yukarıdaki örneğin de bundan hiçbir farkı yoktur. Biz şimdiki örneğimizde alt satıra geçtiğimiz için bütün karakter dizilerini parantez içine aldık, o kadar... Yani önceki derste gördüğümüz örneği iki satıra bölmek isteseydik şöyle bir kod yazacaktık:
>>> print ("İstanbul "
... "Çeliktepe")
Bu yöntemlerden herhangi birini tercih edebilirsiniz. Ama etrafta göreceğiniz programlarda hepsiyle karşılaşma ihtimaliniz var...
MS-DOS’ta Türkçe Karakter Problemi¶
Yukarıda kodlama biçimi belirterek Türkçe karakterleri nasıl göstereceğimizi inceledik. Türkçe karakterlerin problem çıkardığı bir başka ortam da MS-DOS’tur. Windows’un komut satırı Türkçe karakterleri düzgün göstermekte zorlanabiliyor... Bu bölümde bu sorunu nasıl aşabileceğimizi inceleyeceğiz.
Mesela şu kodları deneme.py adlı bir dosyaya kaydettiğimizi varsayalım:
# -*- coding: cp1254 -*-
santigrat = 22
fahrenhayt = santigrat * (9.0/5.0) + 32
print ("%s santigrat derece %s fahrenhayta karşılık gelir."
%(santigrat, fahrenhayt))
Bu dosyayı MS-DOS’ta python deneme.py komutunu vererek çalıştırmak istediğimizde şöyle bir çıktı alıyoruz:
22 santigrat derece 71.6 fahrenhayta kar?²l²k gelir.
Gördüğünüz gibi bütün Türkçe karakterler birbirine girmiş durumda. Bunun temel sebebi Windows’ta komut satırının öntanımlı yazı tipinin Türkçe karakterleri düzgün gösterememesi. Bu durumu düzeltmek için şu adımları takip ediyoruz:
- Önce MS-DOS ekranını açıyoruz.
- Ardından şu komutu veriyoruz:
chcp 1254
- Daha sonra pencere başlığına sağ tıklayıp “özellikler”e giriyoruz.
- Yazı Tipi sekmesi içinde yazı tipini “Lucida console” olarak değiştiriyoruz.
- Tamam’a basıyoruz.
- Karşımıza çıkan pencerede, “özellikleri, aynı başlıkla ileride oluşturulacak pencereler için kaydet” seçeneğini işaretliyoruz.
Şimdi en başta verdiğimiz kodları çalıştırdığımızda şu çıktıyı alıyoruz:
22 santigrat derece 71.6 fahrenhayta karşılık gelir.
Böylece çok önemli bir konuyu daha geride bırakmış olduk. Üstelik bu noktaya kadar Python’la ilgili epey bilgi de edindik. Dilerseniz şimdi bölüm sorularımıza bir göz atalım ve ondan sonra yeni ve yine çok önemli bir konuya geçelim.
Bölüm Soruları¶
1. Komut satırında masaüstünün bulunduğu konuma gelebilmek için hangi komutu kullanmanız gerekiyor?
2. Eğer Windows kullanıyorsanız C:\Program Files dizini altında, GNU/Linux kullanıyorsanız /usr/bin dizini altında bir komut ekranı açın.
3. Eğer Windows kullanıyorsanız, önce http://www.videolan.org/vlc/ adresini ziyaret edin ve oradan VLC adlı programı indirin. Şimdi indirdiğiniz bu programı normal bir şekilde kurun. Ardından, bilgisayarınızda VLC klasörünü bulup, bu klasör içindeki vlc.exe‘yi YOL’a (PATH) ekleyin. Son olarak, vlc komutu ile programı MS-DOS’tan çalıştırın.
4. Hem Windows’ta hem de GNU/Linux’ta şu betiği herhangi bir konumdan sadece ismi ile çağrılabilecek hale getirin. Yani betiğe hesaplayici.py adını verdiğinizi varsayarsak, komut satırından sadece hesaplayici komutu girilerek programınız çalıştırılabilmeli:
yukseklik = 4
taban = 6
alan = taban * (yukseklik / 2)
print alan
5. Eğer Windows kullanıyorsanız, 4. soruda yazdığınız Python programının çift tıklamayla çalışmasını sağlayın.
6. Aşağıdaki bilgileri kullanarak bir Python programı yazın. Buradaki uzun karakter dizisini yazdırırken, farklı yöntemler kullanarak karakter dizisini uygun yerinden bölmeye dikkat edin:
maaş: 3500 TL, ünvan: İş Geliştirme Uzmanı,
çalıştığı süre: 5
"Ahmet Bey ... TL maaşla çalışan bir ...'dır.
Kendisi ... yıldır bu görevde bulunmaktadır."
7. Eğer GNU/Linux kullanıyorsanız, yazdığınız bir Python programının ilk satırına #!/usr/bin/env python yerine farklı bir şey yazın. Mesela şunu:
#!/usr/python
Şimdi bu programı chmod komutuyla çalıştırılabilir hale getirin ve programı adıyla çağırmayı deneyin. Ne tür bir hata mesajı alıyorsunuz?
Aynı programı bir de #!/usr/bin/env python gibi bir satır yazmadan çalıştırmayı deneyin. Bu defa nasıl bir hata mesajı alıyorsunuz? Sizce bu hata mesajlarını almanızın sebebi nedir?