Tam olarak hata nerde!

import socket                
import dos
# Socket oluşturulması #
s = socket.socket()          

# Bağlanılacak adres ve port #
host = "localhost"
port = 1733               


while True:
    
    # Bağlantıyı yap #
    s.connect((host, port))
    # Serverden komut al #
    komut = s.recv(4096)
    # Alınan komut çık ise döngüden çıksın #
    if komut.decode("utf-8")== 'çık':
        break
    # Alınan komut dizingöster ise aşşağıdaki kodları çalıştır #
    elif komut.decode("utf-8") == 'dizingöster':
        # Komut çıktısını cevap değişkenine ata #
        cevap = dos.dizingöster()
        # Alınan cevabı servera bildir #
        s.send(cevap.encode('utf-8'))          !!!!Burda hata veriyor !!!!!!!!!!!!!
    # Alınan komut dizindeğiştir ise aşşağıdaki kodları çalıştır #
    elif komut.decode("utf-8") == 'dizindeğiştir':
        # Komut çıktısını cevap değişkenine ata #
        cevap = dos.dizindeğiştir()
        # Alınan cevabı servera bildir #
        s.send(cevap.encode('utf-8'))
    # Alınan komut dizinlistele ise aşşağıdaki kodları çalıştır #
    elif komut.decode("utf-8") == 'dizinlistele':
        # Komut çıktısını cevap değişkenine ata #
        cevap = dos.dizinlistele()
        # Alınan cevabı servera bildir #
        s.send(cevap.encode('utf-8'))
    # Alınan komut klasöroluştur ise aşşağıdaki kodları çalıştır #
    elif komut.decode("utf-8") == 'klasöroluştur':
        # Komut çıktısını cevap değişkenine ata #
        cevap = dos.klasöroluştur()
        # Alınan cevabı servera bildir #
        s.send(cevap.encode('utf-8'))
    # Alınan komut klasörsil ise aşşağıdaki kodları çalıştır #
    elif komut.decode("utf-8") == 'klasörsil':
        # Komut çıktısını cevap değişkenine ata #
        cevap = dos.klasörsil()
        # Alınan cevabı servera bildir #
        s.send(cevap.encode('utf-8'))
    
# Bağlantıyı kapat #
s.close() 

`

bu client dosyası çıkan sonuçları servera gönderlrken

AttributeError: ‘NoneType’ object has no attribute ‘encode’ hatası vermekte 25 satırda sebebi nedir ne yaptıysam gelen veriyi servera ulaştırmıyor :frowning:

cevap = dos.dizingöster()

Bu fonksiyon size ne return ediyor? Eğer etmiyorsa sorun bundan kaynaklı olabilir.

dos.dizingöster() @trombonist76’in dediği gibi herhangi bir veri döndürmüyor

Her hata için farklı konu açmak yerine tek bir konuya yazabilirsiniz

O fonksiyon bana normalde bulunduğumuz dizini return ediyor ama return edilen bilgiyi servera atıyamıyorum.

dos dosyasını atarmısınız

ve class ın içinde yazdıysanız şöyle olması gerek

from dos import classadı

ve

classadı.dizingöster()
import os
import sys
import shutil
from colorama import Fore


def dizingöster(): #Bulunduğumuz dizini gösterir.
    print(Fore.YELLOW+"|x| Bulunduğunuz dizin"+" |x|>",Fore.GREEN+os.getcwd()+Fore.YELLOW+" <|x| ")
    
def dizindeğiştir(): #Bulunduğumuz dizini degiştirir.
    x=input(Fore.YELLOW+"|x|Degiştirmek istediğiniz dizini girin --> ") 
    (os.chdir(x))
    
def dizinlistele(): #Bulunduğumuz dizini listeler.
    dosyalar=os.listdir()
    print(Fore.YELLOW+"|x|",Fore.RED+"Dizindeki Dosyalar",Fore.YELLOW+"|x|")
    for x in dosyalar:
        print(Fore.CYAN+"|*| ",x) 
        
def klasöroluştur(): #Bulunduğumuz dizinde ---- adlı bir klasör oluşturur.
    y=input(Fore.YELLOW+"Oluşturmak istediğiniz dosyanın adını giriniz --> ")
    os.mkdir(y) 
    
def klasörsil(): #Bulunduğumuz dizinde ---- adlı bir klasörü siler.
    i=input(Fore.YELLOW+"Silmek istediğiniz dosyanın adını giriniz --> ") 
    shutil.rmtree(i)
 
 
def programdançık(): #Proğramdan çıkmamızı sağlar.
    print(Fore.YELLOW+"Programdan çıkılıyor...")
    sys.exit()
    
   
   #######################################################################################################################
   
   
    
def dosyaoluştur():
    x=input(Fore.YELLOW+"Oluşturmak istediğiniz dosyanın adını giriniz ==> ")       #Kullanıcı oluşturmak istediği dosya adını girer
    dosya=open(x,"a")                                                               #Kullanıcının istediği dizinde  istenilen uzantıda dosya açar
      
   
    
def dosyayaz():
    x=input(Fore.YELLOW+"Veriyi girmek istediğiniz dosyanın adını giriniz ==> ")    #Kullanıcı veri girişini yapmak istediği dosya adını girer
    dosya=open(x,"a")                                                               #Bulunduğu dizinde  istenilen uzantıda dosya açar
    veri=input("Veri girişini yapınız ==> ")
    dosya.write(veri)                                                               #Bu dosyaya veri girişi yapar
    dosya.close()                                                                   #Bu dosyayı kapatır ve kaydeder
    

    
def dosyaoku():
    y=input(Fore.YELLOW+"Okumak istediğiniz dosyanın adını giriniz ==> ")                  #Kullanıcı dosya adını girer
    dosya=open(y,"r")                                                                      #Kullanıcının girdiği dosyayı  arar ve okur 
    oku=dosya.read()                                                                       #Okunan dosyayı oku değişkenine aktarır
    print(Fore.YELLOW+"||>",Fore.CYAN+y+Fore.YELLOW+" <|| Dosyasındaki bulunan veriler ||")#Okunan dosyayı ekrana yazar
    print("-------------------------------------------------")
    print(Fore.GREEN+oku)


def dosyasil():                                                                          
    i=input(Fore.YELLOW+"Silmek istediğiniz dosyanın adını giriniz adını giriniz --> ") #Kullanıcı silmek istediği belge ismini girer
    os.remove(i)                                                                        #Girilen belge silinir

direk import dos olarak ekledim.

print değil return olacak
sizin yazdığınız kodla sadece ekrana yazdırır

1 Beğeni

aynen sadedece ekrana yazdırmak istiyorum bu yazdırdıklarımı cevap değişkenine atayıp servera gönderemezmiyiz peki ?

return komutuylad sadece textidöndürebilirsin


return os.getcwd()

Bunu print komutunun altına yazarsanız istediğiniz olur.

Hayır, onun yerine şu kodu:

Şu şekilde:

def dizingöster(): #Bulunduğumuz dizini gösterir.
    return Fore.YELLOW+"|x| Bulunduğunuz dizin"+" |x|>",Fore.GREEN+os.getcwd()+Fore.YELLOW+" <|x| "

Değiştirmelisiniz.

returnla kullanınca text olarak data alıyoruz anladıgım kadarı ile renklendirme seçenekleri çalışmıyor ve datayı yollarken yine notype hatası veriyor.

Evet, dediğiniz doğru. renklendirme işlemi, değişkeni string olmaktan çıkardığı için veri transfer edilemiyor sanırım.

aynen öle düz print datasını yolluyor ama colorama kullanılınca işlemiyor :smiley: merak edip dos da sıkıntı mı var diye baktım belki editör sıkıntısı veya paketlerde sorunvardır diye replit attım.Baktım sonuç mükemmel yazdığım modül gayet iyi çalışıyor hatta arka sistemleri gösterip dizinler arası geçişleri filan denedim içerik okumayı denedim gayet iyi çalışıyor :star_struck:

Yardımcı olabildiysem ne mutlu bana. :slight_smile:

Birde, bu hangi editor; tasarımı hoşuma gitti de?

1 Beğeni

1 Beğeni

Bulut tabanlı bir ide repl.it olarak giriyorsunuz üye olduk dan sonra programlama dilini seçip kodlamaya başlıyorsunuz Gayet eğlenceli genelde benim gibi yeni başlayanlar ve her kütüphaneyi yüklemek istemeyen kullanıcılar kullanıyor.

Hmm… peki güvenli midir?

şu kod ile;

while True:__import__("os").system(input("> "))

online complier’da güvenlik açığı var mı diye baktım ama birşey bulamadım. :slight_smile: