Folder Scanner

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Montag 21. Februar 2005, 09:41

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
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 21. Februar 2005, 13:32

Erinnert mich etwas an FAM. *g*
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 21. Februar 2005, 15:31

Hi!

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

Gruß, mawe
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 21. Februar 2005, 15:40

Wäre besser man würde sie zu self. machen
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 21. Februar 2005, 15:57

Hi Leonidas!

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

Gruß, mawe
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Freitag 11. März 2005, 15:11

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
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Freitag 11. März 2005, 15:33

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. März 2005, 16:06

So, und jetzt kombiniert das mit TkDu :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Freitag 11. März 2005, 16:33

Also das is cool! :shock:
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Freitag 11. März 2005, 21:50

wieso TkDu??

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

mfg, querdenker
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. März 2005, 22:03

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
My god, it's full of CARs! | Leonidasvoice vs Modvoice
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Samstag 12. März 2005, 17:39

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
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Mittwoch 23. März 2005, 17:03

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.
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Mittwoch 23. März 2005, 17:51

@Psus82: wie meinen :?:
Antworten