Terminal kod hatası yakalama

Öncelikle iyi forumlar.
Yazdığım basit bir program

os.system("pip3 install örnek")

kısmını yazıyor ve terminalde açıyor ama örnek kısmına kütüphane olmayan bir değer girildiğinde yükselen hatayı nasıl yakalayabilirim ?

from subprocess import Popen, PIPE

process = Popen(["pip3", "install", "örnek"], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()

print(stderr.decode("utf-8"))

Bunu kullanarak terminalin verdiği hatayı yakalayabilirsiniz.

1 Beğeni

Pip’in verdiği çıktıyı işlemek yerine modülü import etmeye çalışmanız daha pratik olabilir:

import subprocess

def install_library(lib):
    subprocess.call("pip install " + lib, shell = True)
    try:
        __import__(lib)
    except ModuleNotFoundError:
        return False
    else:
        return True


if install_library("numpy"):
    print("Başarıyla indirildi.")
else:
    print("İndirme işlemi tamamlanamadı.")

Modülün içe aktarılmasından kaçınmak isteniyorsa şöyle bir şey de kullanılabilir:

import subprocess
import importlib

def install_library(lib):
    if importlib.util.find_spec(lib) is not None:
        return True
    subprocess.call("pip install " + lib, shell = True)
    return importlib.util.find_spec(lib) is not None


if install_library("numpy"):
    print("Başarıyla indirildi.")
else:
    print("İndirme işlemi tamamlanamadı.")

2 Beğeni

Kodun tamamı ile uyum sağlarmı

import tkinter as tk
import os 
import sys

def indir():
    data1 = değer1.get()
    data2 = değer2.get()

 	os.system("pip{} install {}".format(data2 , data1))



pencere = tk.Tk()
pencere.geometry("350x300")
pencere.title("Paket Yükleyici v0.1")
pencere.resizable(False,False)

değer1 = tk.Entry(font="Verdana 13",fg="AQUA")
değer1.place(x=20,y=20)

değer2 = tk.Entry(font="Verdana 13",fg="RED")
değer2.place(x=20,y=60)
değer2.insert(0,"Python 3")

buton1 = tk.Button(text="İndir",fg="GREEN",font="Verdana 15",command=indir)
buton1.place(x=20,y=100)

buton2 = tk.Button(text="İptal Et",fg="RED",font="Verdana 15",command=sys.exit)
buton2.place(x=20,y=150)

lamel1 = tk.Label(text="Kütüphane Adı",fg="RED")
lamel1.place(x=250,y=25)

lamel2 = tk.Label(text="Python sürümü",fg="GREEN")
lamel2.place(x=250,y=65)

pencere.mainloop()

Attığım örnekler fonksiyon halinde zaten, uyum sağlaması için hangi şartları karşılaması lazım?

try ve except gibi olması lazım

Tam olarak bunun gibi

Fonksiyon kütüphane yüklendiyse veya zaten yüklü ise True, aksi takdirde False döndürüyor. Buna göre istediğiniz şekilde kullanabilirsiniz.

koşullu durumların fonksiyon hali diyebilirz o zaman

Açıklarmısınız bu kısımlar ne işe yarıyor