Python'un etkileşimli kabuğu (REPL, read-eval-print loop), terminalde argümansız python (macOS ve Linux'ta python3) yazdığınızda açılan ve yazdığınız her ifadeyi anında çalıştırıp sonucunu gösteren ortamdır. >>> istemi yeni bir komut beklediğini, ... istemi ise çok satırlı bir yapının devamını beklediğini gösterir. Çıkmak için exit yazabilir ya da Windows'ta Ctrl+Z ardından Enter, Unix sistemlerde Ctrl+D tuşlarına basabilirsiniz.

Python 3.13'ten beri varsayılan kabuk, PyPy projesinin kodu temel alınarak yazılmış yeni bir arayüzdür: çok satırlı düzenleme, renkli hata çıktısı, F1 ile yardım tarayıcısı, F2 ile geçmiş ve F3 ile yapıştırma modu sunar. Bu yazı istemleri, _ değişkenini, help() ve dir() ile keşfi, yeni kabuğun kısayollarını, renk ayarlarını ve kabukla ilgili komut satırı seçeneklerini anlatıyor. Kurulumu henüz yapmadıysanız Python kurulumu yazısıyla başlayın; serinin tamamı Python öğrenme rehberi sayfasında.

Kabuğu açmak ve istemler

Kabuğu açmak ve istemler

Yorumlayıcı, standart girdisi bir terminale bağlıyken çalıştırıldığında etkileşimli moda geçer. Önce sürüm numarasını ve telif bilgisini içeren bir karşılama mesajı yazdırır, ardından birincil istemi gösterir. Bu karşılama mesajını görmek istemiyorsanız python -q ile başlatabilirsiniz. Bir if, for ya da fonksiyon tanımı gibi çok satırlı bir yapı yazdığınızda ikincil istem ... görünür ve yapıyı bitirmek için boş bir satır girmeniz gerekir:

python
>>> dunya_duz = True
>>> if dunya_duz:
...     print("Kenarına dikkat edin!")
...
Kenarına dikkat edin!

Bu yazıdaki etkileşimli örneklerde istemle başlayan satırlar sizin yazdıklarınızdır, istemsiz satırlar ise Python'un çıktısıdır. Resmî Tutorial da aynı gösterimi kullanır. Örnekleri denerken istemleri yazmayın, yalnızca istemden sonraki kısmı yazın.

Hesap makinesi olarak kabuk ve _ değişkeni

Kabukta bir ifade yazdığınızda sonucu hemen ekrana gelir; print() çağırmanız gerekmez. Bir atama ise çıktı üretmez. Etkileşimli modda son yazdırılan ifadenin değeri _ adlı özel bir değişkende tutulur, böylece hesaplara kaldığınız yerden devam edebilirsiniz:

python
>>> kdv = 12.5 / 100
>>> fiyat = 100.50
>>> fiyat * kdv
12.5625
>>> fiyat + _
113.0625
>>> round(_, 2)
113.06

_ değişkeni yalnızca etkileşimli kabukta bu anlama sahiptir ve builtins modülünde saklanır. Belgeler bu ismi salt okunur kabul etmenizi önerir: _ = 5 gibi bir atama yaparsanız aynı adlı yeni bir değişken oluşturur ve özel davranışı gölgelersiniz. Betik dosyalarında _ sıradan bir değişken adıdır ve genellikle kullanılmayan değerler için tercih edilir.

Kabuğun gösterdiği değer ile print() farkı

Kabuk bir ifadenin sonucunu gösterirken nesnenin repr() biçimini kullanır; bu biçim mümkün olduğunca değeri yeniden oluşturabileceğiniz hâlidir. print() ise str() biçimini yazar ve özel karakterleri yorumlar. Metinlerde fark hemen görünür:

python
>>> s = 'Birinci satır.\nİkinci satır.'
>>> s
'Birinci satır.\nİkinci satır.'
>>> print(s)
Birinci satır.
İkinci satır.

İlk durumda tırnaklar ve \n kaçış dizisi görünür, ikincisinde ise gerçek bir satır sonu oluşur. Bu fark, kabukta denediğiniz bir kodu betiğe taşıdığınızda şaşırtabilir: betikte yalnızca s yazmak hiçbir şey yazdırmaz, ekrana bir şey çıkması için print(s) gerekir. Bir değeri olduğu gibi incelemek istediğinizde betikte de print(repr(s)) kullanabilirsiniz.

help() ve dir() ile keşif

help() yerleşik yardım sistemini çağırır ve etkileşimli kullanım için tasarlanmıştır. Argümansız çağrıldığında kabukta ayrı bir yardım oturumu başlar; bir nesne verildiğinde o nesnenin yardım sayfasını gösterir. Bir metin verirseniz modül, fonksiyon, sınıf, anahtar kelime ya da belge konusu adı olarak aranır. Python 3.15.2'de help(len) şu çıktıyı verir:

python
>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

İmzadaki / işareti, ondan önceki parametrelerin yalnızca konumla verilebileceğini gösterir; yani len(obj=[1, 2]) yazamazsınız. Bu söz diziminin ayrıntısı parametreler yazısında. help(str.split) gibi bir çağrı metotların parametrelerini ve varsayılan değerlerini de açıklar. help() fonksiyonu yerleşik isim alanına site modülü tarafından eklenir; bu yüzden normal kurulumlarda her zaman hazırdır.

dir() ise bir nesnenin niteliklerini liste olarak döndürür. Bir modülün içinde ne olduğunu hızlıca görmek için idealdir. Listeyi filtrelemek için kabukta küçük bir list comprehension da yazabilirsiniz:

python
>>> import math
>>> [ad for ad in dir(math) if ad.startswith("is")]
['isclose', 'isfinite', 'isinf', 'isnan', 'isnormal', 'isqrt', 'issubnormal']
>>> type(math.pi)
<class 'float'>
>>> math.pi
3.141592653589793

type() bir değerin tipini gösterir ve özellikle bir fonksiyonun ne döndürdüğünden emin olmadığınızda işe yarar. Tipler ve nesneler değişkenler yazısında anlatılıyor; list comprehension söz dizimi ise kendi yazısında.

Yeni kabuğun özellikleri (3.13, 3.14 ve 3.15)

Yeni kabuğun özellikleri (3.13, 3.14 ve 3.15): Ayrı komut geçmişi olan etkileşimli yardım tarayıcısını (pydoc) açar, Komut geçmişini çıktılar ve istemler olmadan gösterir...

Python 3.13 ile gelen yeni kabuk, terminalden başlatıldığında çok satırlı düzenlemeyi geçmişiyle birlikte destekler: daha önce yazdığınız bir fonksiyon tanımını yukarı okla tek parça hâlinde geri çağırıp düzenleyebilirsiniz. help, exit ve quit komutları parantez olmadan da çalışır. İstemler ve hata izleri varsayılan olarak renklidir.

Tuş ya da komutİşlevi
F1Ayrı komut geçmişi olan etkileşimli yardım tarayıcısını (pydoc) açar
F2Komut geçmişini çıktılar ve istemler olmadan gösterir
F3Yapıştırma modu: uzun kod bloklarını yapıştırmayı kolaylaştırır, F3 ile normal isteme dönülür
TabDeğişken, modül ve nitelik adlarını tamamlar
exit veya quitKabuktan çıkar, parantez gerekmez
Ctrl+CYazılan girdiyi iptal eder ya da çalışan komutu KeyboardInterrupt ile keser

Python 3.14 bu kabuğa söz dizimi renklendirmesi ve içe aktarma tamamlama ekledi: import co yazıp Tab'a bastığınızda co ile başlayan modüller önerilir. Python 3.15'te ise Tab tamamlamaları nesne türüne göre renklendirilir ve from ... import satırlarında modülün nitelikleri de önerilir. Renkli tamamlama yerine eski rlcompleter davranışını istiyorsanız PYTHON_BASIC_COMPLETER ortam değişkenini tanımlayabilirsiniz. Komut geçmişiniz varsayılan olarak kullanıcı klasörünüzdeki .python_history dosyasına kaydedilir; konumu 3.13'te eklenen PYTHON_HISTORY değişkeniyle değiştirebilirsiniz.

Yeni kabuk yerine klasik kabuğu kullanmak isterseniz PYTHON_BASIC_REPL ortam değişkenine herhangi bir değer vermeniz yeterlidir. Klasik kabuk tüm platformlarda çalışır ama satır düzenleme yetenekleri sınırlıdır. Bir fark daha var: klasik kabukta exit yazmak sizi çıkarmaz, Windows'ta "Use exit() or Ctrl-Z plus Return to exit" mesajını gösterir; orada exit() biçimini kullanmanız gerekir.

Renkleri açmak ve kapatmak

Yorumlayıcı hata izleri gibi çıktılarda varsayılan olarak renk kullanır ve bu davranış ortam değişkenleriyle denetlenir. TERM değişkeni dumb ise renk kapanır. FORCE_COLOR tanımlıysa, terminal olmayan ama ANSI kodlarını gösterebilen CI ortamlarında da renk açılır. NO_COLOR tanımlıysa bütün renkler kapanır ve FORCE_COLOR değişkeninden önceliklidir. Yalnızca Python'u etkilemek istiyorsanız PYTHON_COLORS kullanın: 1 rengi açar, 0 kapatır ve diğer iki değişkenden önceliklidir. Python 3.15'te python --help çıktısı da renklendirildi.

Hatalar ve kesintiler

Kabukta bir hata oluştuğunda Python hata mesajını ve iz kaydını (traceback) yazdırır, sonra birincil isteme döner; oturumunuz kapanmaz ve tanımladığınız değişkenler yerinde kalır. Aynı hata bir betikte olsaydı program sıfırdan farklı bir çıkış koduyla sonlanırdı. Tanımlanmamış bir isim kullandığınızda son satır şöyledir:

python
>>> n
Traceback (most recent call last):
  ...
NameError: name 'n' is not defined

İz kaydındaki dosya adı klasik kabukta <stdin>, yeni kabukta ise <python-input-0> biçimindedir; sayı, kaçıncı girdide olduğunu gösterir. Uzun süren bir komutu durdurmak için Ctrl+C'ye basarsınız; bu, çalışan koda KeyboardInterrupt istisnası gönderir ve isterseniz try ile yakalanabilir. Henüz Enter'a basmadığınız bir girdide Ctrl+C girdiyi iptal eder.

Betik çalıştırıp kabukta kalmak: -i

Betik çalıştırıp kabukta kalmak: -i

Bir betiği çalıştırdıktan sonra değişkenlerini incelemek istediğinizde -i seçeneği çok kullanışlıdır. Python betiği sonuna kadar çalıştırır, ardından aynı isim alanında etkileşimli moda geçer. Betik bir hatayla sonlansa bile kabuk açılır, böylece hatanın oluştuğu andaki değerlere bakabilirsiniz:

python
sepet = {"elma": 3, "armut": 5}
toplam = sum(sepet.values())
print("Toplam:", toplam)
bash
python -i inceleme.py
Toplam: 8
>>> sepet
{'elma': 3, 'armut': 5}
>>> toplam * 2
16

Belgelere göre -i, -c ve -m seçenekleriyle de çalışır ve standart girdi terminal olmasa bile etkileşimli modu başlatır. Bu modda PYTHONSTARTUP dosyası okunmaz.

Başlangıç dosyası ve istemi değiştirmek

Kabuğu her açtığınızda aynı modülleri içe aktarıyorsanız bunları bir başlangıç dosyasına yazıp PYTHONSTARTUP ortam değişkenine o dosyanın yolunu verebilirsiniz. Dosya yalnızca etkileşimli oturumlarda, ilk istemden önce ve kabukla aynı isim alanında çalıştırılır; betik çalıştırırken okunmaz.

python
import math
import sys
from pprint import pprint
print("Başlangıç dosyası yüklendi")

Aynı dosyada sys.ps1 ve sys.ps2 değerlerini değiştirerek birincil ve ikincil istemleri özelleştirebilirsiniz. Değişiklik oturum sırasında da anında etkili olur:

python
>>> import sys
>>> sys.ps1 = 'py> '
py> 1 + 1
2

Kabukla ilgili komut satırı seçenekleri

SeçenekNe yapar
-qKarşılama mesajını göstermeden kabuğu açar
-iBetik, -c ya da -m çalıştıktan sonra etkileşimli moda geçer
-c komutVerilen kodu çalıştırır, 3.14 ile birlikte kodu otomatik girintiden arındırır
-m modülModülü __main__ olarak çalıştırır, örneğin python -m venv
-EPYTHONPATH gibi tüm PYTHON* ortam değişkenlerini yok sayar
-IYalıtılmış mod: -E, -P ve -s seçeneklerini birlikte uygular
-V ve -VVSürüm numarasını, ikinci biçimde derleme bilgisini de yazar
-h, --help-envSeçeneklerin ve ortam değişkenlerinin kısa açıklamasını gösterir

Sık yapılan hatalar

Kabuk çıktısını betikten beklemek. Kabukta 2 + 2 yazınca 4 görürsünüz ama aynı satır bir .py dosyasında hiçbir şey yazdırmaz. Betiklerde sonucu görmek için print() kullanın.

İstemleri de kopyalamak. Belgelerden ya da bir yazıdan kod kopyalarken >>> ve ... işaretlerini de alırsanız söz dizimi hatası alırsınız. Uzun blokları yeni kabukta F3 yapıştırma moduyla yapıştırmak girinti sorunlarını da azaltır.

Çok satırlı bloğu bitirmemek. Klasik kabukta bir for ya da if bloğu ancak boş bir satır girildiğinde çalışır. İkincil istem görünürken bir sonraki komutu yazarsanız Python onu bloğun parçası sanar.

Kabuğu terminal komutlarıyla karıştırmak. >>> isteminde pip install ya da python dosya.py yazmak SyntaxError verir; bu komutlar Python kabuğunda değil, işletim sisteminin terminalinde çalışır. Önce exit ile kabuktan çıkın.

Sık Sorulan Sorular

Kabukta yazdığım kodu nasıl kaydederim?

Kabuk oturumu bir dosyaya kaydedilmez; yalnızca komut geçmişi .python_history dosyasında tutulur. Kalıcı olmasını istediğiniz kodu bir .py dosyasına yazın ve python -i dosya.py ile çalıştırıp kabukta denemeye devam edin. F2 ile açılan geçmiş görünümü, istemler olmadan kopyalamayı da kolaylaştırır.

Yeni kabuk neden açılmıyor, eski görünüm geliyor?

Yeni kabuk yalnızca etkileşimli bir terminalden başlatıldığında devreye girer ve PYTHON_BASIC_REPL tanımlıysa devre dışı kalır. Bu değişkenin ortamınızda tanımlı olup olmadığını kontrol edin.

help() sonrası nasıl çıkarım?

Argümansız help() ile açılan oturumun istemi help> biçimindedir. Aracın kendi açılış mesajının söylediği gibi q, quit ya da exit yazarak Python istemine dönersiniz; çıkarken araç, bir nesnenin yardımını doğrudan help(nesne) ile alabileceğinizi hatırlatır. Tek bir nesnenin yardımını görmek için doğrudan help(nesne) çağırmak daha pratiktir.

Kabuk ile IDLE arasındaki fark nedir?

IDLE, standart Python dağıtımıyla gelen basit bir düzenleyici ve kabuk ortamıdır; macOS kurulumunda Applications klasörüne yerleşir, bazı Linux dağıtımlarında ayrı paket olarak kurulur. Terminaldeki REPL ise doğrudan yorumlayıcının kendisidir. Kurulum ayrıntıları kurulum yazısında.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: Python öğrenme rehberi · Python kurulumu · Değişkenler ve veri tipleri · Sık hata mesajları