Seite 1 von 1

Folder Scanner

Verfasst: Montag 21. Februar 2005, 09:41
von Psus82
Hier ist ein Script das einen Ordner auf neue geänderte und entfernte Dateien in einem bestimmten Abstand prüft.
Die Ergebnisse werden dan per E-Mail an eine vorher definierte Adresse geschickt.

Code: Alles auswählen



from Tkinter import * 
import sys 
import tkFileDialog 
import tkSimpleDialog 
import os,time 
import smtplib
import pickle
import thread

class FolderScanner:
    
    def __init__(self):
        self.Status = 1
        Mainwindow = Tk() 
        Mainwindow.geometry("400x250+0+0") 
        global RunScriptButton
        
        RunScriptButton = Button(Mainwindow, text = "Run script", bg = "green", width = 25, height = 2, command = self.Thread) 
        RunScriptButton.place(x = 117.5, y = 30) 
        
        ChangeFolderButton = Button(Mainwindow, text = "Choose folder to scan", width = 25, command = self.ChangeFolder) 
        ChangeFolderButton.place(x = 25, y = 100) 

        ChangeMailAdressButton = Button(Mainwindow, text = "Choose mailadress", width = 25, command = self.EmailAdress) 
        ChangeMailAdressButton.place(x = 215, y = 100) 

        ChangeLogButton = Button(Mainwindow, text = "Choose destination of logfile", width = 25, command = self.DefineLogFolder) 
        ChangeLogButton.place(x = 215, y = 150) 

        ChangeTimeButton = Button(Mainwindow, text = "Choose repeattime of script(sek.)", width = 25, command = self.Repeattime)  
        ChangeTimeButton.place(x = 25, y = 150) 

        ChangeLogButton = Button(Mainwindow, text = "Create Log Files",bg = "yellow", width = 25, command = self.CreateLogFiles) 
        ChangeLogButton.place(x = 117.5 ,y = 200) 

        mainloop()
        
    def ChangeFolder(self): 
        global FolderToScan
        FolderToScan = tkFileDialog.askdirectory() 


    def EmailAdress(self): 
        global EmailAdress
        EmailAdress = tkSimpleDialog.askstring("E-Mail","E-Mailadress:")

    def CreateLogFiles(self):
        global FolderToSaveLog
        FolderToSaveLog = tkFileDialog.askdirectory()
        FakeToStart = [('Fake.pdf', 1111111111), ('Fake.txt', 1111111111)] 
        os.chdir(FolderToSaveLog)
        open('log.txt','w').close()
        Txt = open('log2.txt','w')
        pickle.dump(FakeToStart,Txt)
        Txt.close()

    def DefineLogFolder(self):
        global FolderToSaveLog
        FolderToSaveLog = tkFileDialog.askdirectory()

                             
    def Repeattime(self):
        global Time
        Time = tkSimpleDialog.askinteger("Repeattime","Repeattime(sek.):") 

    def StopScript(self):
        global Status
        Status = 0
    
    def Thread(self):
        Status = 1
        thread.start_new_thread(self.Scanning,())
        RunScriptButton.configure(bg = "red") 
 
    def Scanning (self):
        global AccessTimeNew
        global AccessTimeOld
        Status = 0
    
        while self.Status:
            Status += 1
            FilesNew = os.listdir(FolderToScan)
            F = file(FolderToSaveLog + "/log.txt", "r")
            Tempdata1 = F.read()
            F.close()
            FilesOld = Tempdata1.split("/n")
            AccessTimeNew = [(f, os.path.getmtime(FolderToScan+ "/"+f)) for f in os.listdir(FolderToScan) if os.path.isfile(FolderToScan+"/"+f)]
            F2 = file(FolderToSaveLog + "/log2.txt","r")
            AccessTimeOld = pickle.load(F2)
            F2.close()
            
            if FilesNew == FilesOld and AccessTimeNew == AccessTimeOld:
                time.sleep(Time)
                continue

            else:
                FilesNew = os.listdir(FolderToScan)
                AccessTimeNew = [(f, os.path.getmtime(FolderToScan+ "/"+f)) for f in os.listdir(FolderToScan) if os.path.isfile(FolderToScan+"/"+f)] 
                FilesChange = [i for i in FilesNew if not i in FilesOld]
                FilesRemoved =[i for i in FilesOld if not i in FilesNew]
                FilesAccessChanged =[i for i in AccessTimeNew if not i in AccessTimeOld]
                Mailtext = "New Files:"+str(FilesChange)+"\n\n"+"Removed Files:"+str(FilesRemoved)+"\n\n"+"Changed Files:"+str(FilesAccessChanged)
                Host = smtplib.SMTP('deinMailserver')
                Host.sendmail(EmailAdress,EmailAdress,Mailtext)
                {}
                Host.quit()
                FilesOld = FilesNew
                Tempdata2 = "/n".join(FilesOld)
                F = file(FolderToSaveLog + "/log.txt", "w")
                F.write(Tempdata2) 
                F.close()
                AccessTimeOld = AccessTimeNew
                F2 = file(FolderToSaveLog + "/log2.txt","w")
                Tempdata4 = pickle.dump(AccessTimeOld,F2)
                F2.close()
                time.sleep(Time)
                continue
                   
FolderScanner()

      


Psus82

Verfasst: Montag 21. Februar 2005, 13:32
von Leonidas
Erinnert mich etwas an FAM. *g*

Verfasst: Montag 21. Februar 2005, 15:31
von mawe
Hi!

Ich hab den Code jetzt nur überflogen, aber was zum ***** machen diese globals in der Klasse?

Gruß, mawe

Verfasst: Montag 21. Februar 2005, 15:40
von Leonidas
Wäre besser man würde sie zu self. machen

Verfasst: Montag 21. Februar 2005, 15:57
von mawe
Hi Leonidas!

Genau! Hab ich ihm auch schon vorgeschlagen, aber meine Ratschläge werden ja ignoriert :evil: Ich geh jetzt schmollen :D

Gruß, mawe

Habs versucht.

Verfasst: Freitag 11. März 2005, 15:11
von Psus82
Habe es mit self.stat versucht hat aber nicht geklappt.
Habe ein etwas seltsames Python bei mir auf dem Rechner.
Klappt nicht alles was in Python funktioniert.
Und so funktioniert es doch auch.
Ist vielleicht nicht sauber programmiert.
Nicht schmollen Mawe war nicht bös gemeint.

Psus82

Verfasst: Freitag 11. März 2005, 15:33
von mawe
Hi!
Psus82 hat geschrieben: Habe ein etwas seltsames Python bei mir auf dem Rechner.
Klappt nicht alles was in Python funktioniert.
Hihi, das ist mit Abstand die schlechteste Ausrede, die ich je in diesem Forum gelesen hab :D
Psus82 hat geschrieben: Ist vielleicht nicht sauber programmiert.
Vielleicht?
Psus82 hat geschrieben: Nicht schmollen Mawe war nicht bös gemeint.
Weiss ich eh, hab auch schon aufgehört. 20 Tage lang schmollen wär sogar mir zu viel :D

Gruß, mawe

Verfasst: Freitag 11. März 2005, 16:06
von Leonidas
So, und jetzt kombiniert das mit TkDu :)

Verfasst: Freitag 11. März 2005, 16:33
von mawe
Also das is cool! :shock:

Verfasst: Freitag 11. März 2005, 21:50
von querdenker
wieso TkDu??

Unter Windows :WinDirStat
tut es auch ganz gut, oder SequoiaView

mfg, querdenker

Verfasst: Freitag 11. März 2005, 22:03
von Leonidas
querdenker hat geschrieben:wieso TkDu??
Wieso nicht? TkDu ist auch in Python mit Tk geschrieben, und es gibt ja FAM, also so gesehen: warum überhaupt anfangen? So kann man eine ganze Menge lernen :)
querdenker hat geschrieben:Unter Windows :WinDirStat
tut es auch ganz gut, oder SequoiaView
Nicht zu vergessen SpaceMonger

Verfasst: Samstag 12. März 2005, 17:39
von querdenker
Leonidas hat geschrieben: Wieso nicht? TkDu ist auch in Python mit Tk geschrieben, und es gibt ja FAM, also so gesehen: warum überhaupt anfangen? So kann man eine ganze Menge lernen :)
So gesehen hast du Recht, um zu etwas zu lernen sind Programme wie TkDU gut. Mir ging es bei dem Post auch eher um "Usability" (ich weiß, arg strapaziertes Wort). Würde ich Programme "nur" für mich schreiben, sähe ich das auch anders (ich bevorzuge CUIs -schneller-einfacher-keine Hirnknoten). Andererseits habe ich auch immer (eigentlich muss) meine lieben, Windows-verwöhnten, mausabhängingen Klick'n'Go-Kollegen im Kopf. Die Akzeptanz von Programmen, die keine Windows-Optik haben tendiert gegen NULL.

mfg, querdenker

Keine Ausrede.

Verfasst: Mittwoch 23. März 2005, 17:03
von Psus82
Das ist keine Ausrede.
Mein Python wird von einem Programm zur Verfügung gestellt das unter anderem auch eigene Pythonmodule Module besitzt.
Daher funktioniert nicht alles.
Aber der Programm wird bald ein neues Python bekommen.
Hoffe das es bald soweit ist.

Verfasst: Mittwoch 23. März 2005, 17:51
von querdenker
@Psus82: wie meinen :?: