Merhabalar Python’a programlama dilini öğrenmeye başladım öğrenirken belki sizlerin sorun olarak bile bakmayacağınız bir şey ile karşılaştım bu sorunuma yardım edebilirseniz sevinirim.
Aşşağıya kodları yazıyorum.
import sys
f = open(“deneme.txt”, “w”)
sys.stout = f
print(“deneme metni”, flush=True)
deneme metni
print(sys.stout, flush=True)
<_io.TextIOWrapper name=‘deneme.txt’ mode=‘w’ encoding=‘cp1254’
bunun sebebi nedir? Çıktıyı her print() fonksiyonunun çıktısını deneme.txt ye vermek istiyorum ancak olmuyor yine etkileşimli kabuğa veriyor.
Not: bazı kelime hatalarım olabilir kusuruma bakmayın programlamaya öğrenmeye yeni başladım.
Normalde stdout yonlendirmesi calistiran program tarafindan yapilir. Mesela herhangi bir kabukta (Windows’ta bile!) python hede.py > deneme.txt yazarsan programin stdout’u deneme.txt'ye yonlendirilir.
print fonksiyonu file parametresi aliyor. sys.stdout'u f'ye set etmektense f'yi sys.stdout veya deneme.txt'ye set edip print'lere hedefi f olarak gosterebilirsin.
Konudan bağımsız ama sys.stdout'u yönlendirmekle alakalı ekstra bir bilgi olarak burada durmasında sakınca yoktur umarım. Aşağıdaki de bir yönlendirme çeşidi.
Normalde sys.stdout'u aşağıdaki gibi bir listeye yönlendirebiliriz. Ancak sys.stdout'un kullandığı fonksiyonları kullanamayız. Kullanmaya kalktığımızda bir AttributeError hatası yükseltilir.
import sys
a = list()
sys.stdout = a
sys.stdout.write("hello")
Ama aşağıdaki gibi bir class yardımıyla sys.stdout'un write fonksiyonunun sadece adını kullanarak istediğimiz işlemi yapabiliriz.
import sys
save = sys.stdout
class Yonlendir:
def __init__(self, text):
self.text = text
def write(self, string):
# Buraya text'in tipine
# bağlı olarak yazdırma işlemi yerine
# yapılacak işlemler yazılmalı.
if hasattr(self.text, "write"):
self.text.write(string)
elif hasattr(self.text, "append"):
self.text.append(string)
def flush(self):
# Buraya text'in tipine
# bağlı olarak, ``sys.stdout.flush()``
# yerine kullanılacak bir işlem tanımlayabiliriz.
if hasattr(self.text, "flush"):
self.text.flush()
else:
pass
a = list()
sys.stdout = Yonlendir(a)
sys.stdout.write("Hello")
sys.stdout = save
print(a)