Python derleyici yapma


Resimdede anlaşıldığı gibi kendime ait python kodlarını yazdığım bir program yapıyorum.
Dosya kaydetme ve açmayı yaptım lakin derleye bastığımda konsoldaki sonucu alıp altaki sonuç labeline yazdırmayı düşünüyorum nasıl yapabilirim? Yardımcı olursanız sevinirim.

1 Beğeni

Merhabalar,

Öncelikle, bu yapmak istediğiniz bir derleyici olmaz. Programın çalıştırıp çıktısını almak yerine yeni bir komut penceresinde programı Python’un yorumlayıcısı ile çalıştırmanızı öneririm, bazı programlar kullanıcı ile etkileşime girmek isteyebilirler çünkü.

Benzer bir projede bahsettiğim olayı XTerm kullanarak yapmıştım. Windows üzerinde CMD ile yapabilirsiniz.

Şuradaki cevaba göre, subprocess.Popen'in parametrelerinden biri olan creationflags parametresine vereceğiniz CREATE_NEW_CONSOLE flagı ile üstte bahsettiğimi yapabilirsiniz.

Merhaba derleyiciden kastım yazdığım kodları pythona yazmışım gibi düzenleyecek(derleyecek) ve çalıştıracak yoksa pythonun script(yorumlayıcı) bir dil olduğunu biliyorum.Yapmak istediğim şey consoldan çıktı almak bununla ilgili bir bilgin varmı? Bakabileceğim yerler falan. İng. iyi değil ancak araştırarak bir şeyin ne manaya geldiğini bulabiliyorum ama bu konuda arma yaptığımda genelde input ile alakalı şeyler çıkıyor önüme.Bildiğiniz bir şeyler varsa daha rahat araştırabilirim şimdiden teşekkürler.

Sadece çıktıyı almak için subprocess.check_out kullanabilirsiniz.

import sys
import subprocess

def execute_script(script_path):
    return subprocess.check_output([sys.executable, script_path])

out = execute_script('/dosya/yolu/program.py')
print(out)

Yukarıdaki execute_script fonksiyonu ile bir Python scripti çalıştırıp çıktısını döndürebilirsiniz.
sys.execute, Python yorumlayıcısının konumudur. Bu konum sistemden sisteme değişir, Python’un çalıştığı tüm sistemlere destek vermek istiyorsanız kullanmalısınız. Örneğin, Linux ve Windows üzerindeki değerine bakalım.

# Linux
import sys
>>> print(sys.executable)
'/usr/bin/python3'

# Windows
>>> print(sys.executable)
'C:\\Python36\\python.exe'

sys.executable:
A string giving the absolute path of the executable binary for the Python interpreter, on systems where this makes sense. If Python is unable to retrieve the real path to its executable, sys.executable will be an empty string or None.

https://docs.python.org/2/library/sys.html#sys.executable

örneğin print(“selam”) yazdığımızda dediğin şekilde yapıyorum.komut satırında selam yazması lazımken b’selam\r\n’ yazıyor. Aldığım çıktıya başka şeylerde ekleniyor sebebi nedir?

Çıktı normalde öyledir, istediğiniz kısmı aşağıdaki fonksiyonla alabilirsiniz.

def execute_script(script_path):
    return subprocess.check_output([sys.executable, script_path]).decode('utf-8').rstrip()

Çıktıyı önce string formatına getiriyoruz, ardından sağdaki kaçış dizilerini temizliyoruz.

çok teşekkür ederim yardımcı olduğun için.

1 Beğeni

Bu arada, kodlara renklendirme eklemek isterseniz Pygments modülünü kullanabilirsiniz. Kolay gelsin! :slight_smile:

sağolasın imkan bulursam bakacağım inş.

import subprocess
subprocess.check_output([sys.executable, dosya.py]).decode('utf-8').rstrip()

Bu kod python ile dosya.py 'yi çalıştırıp sonucu bize veriyor.

fakat şimdi istediğim dosya.py yerine herhangi bir texti(yazıyı) çalıştırıp sonucu bana versin.
python tanımlı komut satırı veya terminale böyle yazdığımda

python -c "a = 3; print(a)"

sonucu gösteriyor ve ben bu sonucu komut satırından alabiliyorum ama birçok kodtada hata veriyor örneğin

python -c print("deneme")

yazdığımda “deneme”(çift tırnaklı) yerine tek tırnaklı ‘deneme’ yazarsam oluyor.
Bu ve bunun gibi eksiklikleri yüzünden işime yaramadı.

herhangi bir yazıyı(kodu) python 'da çalıştırıp sonucu bana verecek bir çözüme ihtiyacım var.

Yazılan kodu bir dosya içine yazdırın o dosyayı çalıştırın.

yapacağım projede böyle yapınca bazı sorunlar oluyor.Proje python komut kabuğu(shell) gibi komutları tkinter ile yaptığım entrye yazıyorum enterlediğimde sonucu alta yazıyor. Her yazdığım kodu dosyaya kaydedip çalıştırırsam eski kodlarıda çalıştırıyor.

IDLEnin kaynak koduna bakın belki orda bulabilirsiniz.

o kadar iyi değilim :smiley: kaynak kodu nerde bulabilirim büyük ihtimalle baksamda anlamam anlasamda o kadar kodun arasında nasıl bulacam :sweat_smile:

Kodlar düzenli ancak basit değil. Yani 20-30 tane dosya var. Ancak okumak biraz sıkıntı.

Burada çift tırnak sebebiyle sorun çıkması; çift tırnağın, terminalde kullanılan çift tırnak ile karışması sebebiyledir. Normalde bu şekilde her Python kodunu çalıştırabilirsiniz (Birden fazla satır süren kodları noktalı virgül ile ayırmanız gerekir.). Sorununuzu çözmek için kodu tırnak içine almayı deneyin:

python -c "print('deneme')"

Bunu ben biliyorum yaparım ama yapacağım programa entegre edersem kullanışlı olmaz her kod yazana bunu dayatmış olurum
Bu şekilde kod yazılırsa def, if vs. komutu verilemiyor if ve else beraber kullanılırsa bir yöntem var aslında def yerinede lambda kullanılabilir ama programda bu yöntem kullanılırsa kullanıcıyı python kodlarken kısıtlamış oluyoruz

StringIO sınıfını bir araştırın derim o zaman. Karakter dizilerini dosya gibi kullanabilmenize imkan sağlıyor. İstediğiniz şey olabilir. Gerçi exec ve eval gömülü fonksiyonları ile de karakter dizisi halindeki Python kodunu çalıştırabilirsiniz.

Hocam sanırım exec işimi görür neden aklıma gelmedi bilmiyorum lakin exec 'in çıktısını nasıl alabilirim?

exec() fonksiyonunu çalıştırdığınızda sonuçlar standart çıktı konumuna (sys.stdout) veya standart hata konumuna (sys.stderr) yazdırılır. Bu konumları bir widgete (örneğin text widgetine) yönlendirebilirsiniz.