Tach zusammen,
ich möchte gerne mit einem Pythonscript mitloggen ob sich etwas an den Files in einem Ordner ändert.
Ich will wissen ob ein File gelöscht, hinzugefügt oder geändert wird.
Außerdem will ich wissen von wem das File und wann das File geändert wurde und was mit diesem File gemacht wurde.
Habt ihr vielleicht eine Idee?
Dankbar für jede Hilfe.
Gruß
Psus82
Änderung von Dateien mitloggen?
Da gibt's unter Linux den FAM-Daemon mit Python-Modul (FaileAccessMonitor). Das Teil hatte aber arge Probleme bekommen als wir einen ganzen Verzeichnisbaum überwachen wollten. Unsere Lösung war ein periodischer "find"-Aufruf.
cu beyond
cu beyond
Danke aber wie soll das dann in Windows funktionieren.
Und wie kann ich erkennen was an der Datei geändert worden ist?
Und welcher User das war?
Und wie kann ich einen Drucker wählen?
Ich weiß viele Fragen.
Hat jemand ne Antwort?
Need help.
Psus82
Und wie kann ich erkennen was an der Datei geändert worden ist?
Und welcher User das war?
Und wie kann ich einen Drucker wählen?
Ich weiß viele Fragen.
Hat jemand ne Antwort?
Need help.
Psus82
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Tach noch ma.
Hat niemand ne Idee wie ich das Problem lösen könnte?
Ist das überhaupt mit Python für Windows machbar?
Gruß
Psus82
Hat niemand ne Idee wie ich das Problem lösen könnte?
Ist das überhaupt mit Python für Windows machbar?
Gruß
Psus82
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Windows ist nicht meins ...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Im Python Cookbook habe ich etwas gefunden. Das geht scheinbar auch mit Windows.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dank dir Leonidas das war genau das was ich gesucht habe.
Das File ist die perfekte Plattform um mein Script aufzubauen.
Gruß
Psus82
Das File ist die perfekte Plattform um mein Script aufzubauen.
Gruß
Psus82
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Kann mir mal jemand sagen wo ich bei dem Script aus dem Pythoncookbook den Ordner angebe der durchsucht wird?
Dankbar für jede Hilfe
Psus82
Dankbar für jede Hilfe
Psus82
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Aber im Script habe ich nirgendwo paths wiedergefunden.
Path gibt es aber nicht paths.
Muss es dann ca. so aussehen?
Path gibt es aber nicht paths.
Muss es dann ca. so aussehen?
Code: Alles auswählen
def watch_directories (paths = "C:/....." , func, delay = 1.0):
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Zeile 59:
Letzte Zeile:
Der . ist das aktuelle Verzeichnis, also schreibst dort statt dem Punkt Dein Verzeichnis bzw. Deine Verzeichnisse
Gruß, mawe
Zeile 59:
Code: Alles auswählen
for path in paths:
^^^^^
Code: Alles auswählen
watch_directories(['.'], f, 1)
Gruß, mawe
Habe es ausprobiert aber es kommt die Fehlermeldung
Ne Ahnung was das heißt?
Psus82
Code: Alles auswählen
TypeError: watch_directories() takes at least 2 arguments (0 given)
Psus82
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Hier ist mein kompletter Quelltext.
Gruß
Psus82
Edit (Leonidas): Code in Python-Tags gesetzt.
Code: Alles auswählen
from Tkinter import *
import sys
import tkFileDialog
import tkSimpleDialog
import os,time
FolderToScan = None
EmailAdress = None
def ChangeFolder():
FolderToScan = tkFileDialog.askdirectory()
def EmailAdress():
Subwindow1 = Tk()
Subwindow1.geometry("200x100+0+0")
Label1= Label(Subwindow1, text = "E-Mailadress :")
Label1.place(x = 5, y = 10)
EmailAdress = Entry(Subwindow1, width=30)
EmailAdress.place(x = 5, y = 35)
Subwindow1.mainloop()
def ChangeLogFolder():
FolderToSaveLog = tkFileDialog.askdirectory()
def watch_directories (paths , func, delay = 1.0):
all_files = {}
def f (unused, dirname, files):
for filename in files:
path = os.path.join(dirname, filename)
try:
t = os.stat(path)
except os.error:
continue
mtime = remaining_files.get(path)
if mtime is not None:
del remaining_files[path]
if t.st_mtime > mtime:
changed_list.append(path)
else:
changed_list.append(path)
all_files[path] = t.st_mtime
rescan = False
while true:
changed_list = []
remaining_files = all_files.copy()
all_files = {}
for path in paths:
os.path.walk(path, f, None)
removed_list = remaining_files.keys()
if rescan:
rescan = False
elif changed_list or removed_list:
rescan = func(changed_list, removed_list)
time.sleep(delay)
if _name_ == '_main_':
def f (changed_files, removed_files):
print changed_files
print 'Removed', removed_files
watch_directories([FolderToScan], f, 1)
Mainwindow = Tk()
Mainwindow.geometry("400x200+0+0")
#Logo = PhotoImage(file ="I:\Groups3\ELE HW\SYSTEMS_BENCH\PRAK\Patrick Waibel\Projekte\Projekt Folder Scanner\logo.jpg")
#Label2 = Label(image = Logo).pack()
RunScriptButton = Button(Mainwindow, text = "Run script", bg = "green", width = 25, height = 2, command = watch_directories)
RunScriptButton.place(x = 25, y = 30)
StopScriptButton = Button(Mainwindow, text = "Stop script",bg = "red", width = 25, height = 2, command = sys.exit)
StopScriptButton.place(x = 215, y = 30)
ChangeFolderButton = Button(Mainwindow, text = "Change folder to scan", width = 25, command = ChangeFolder)
ChangeFolderButton.place(x = 25, y = 100)
ChangeMailAdressButton = Button(Mainwindow, text = "Change mailadress", width = 25, command = EmailAdress)
ChangeMailAdressButton.place(x = 215, y = 100)
ChangeLogButton = Button(Mainwindow, text = "Change destination of logfile", width = 25, command = ChangeLogFolder)
ChangeLogButton.place(x = 25, y = 150)
del FolderToScan
mainloop()
Psus82
Edit (Leonidas): Code in Python-Tags gesetzt.
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Na gut, schaun wir mal:
Hier rufst Du eigentlich watch_directories auf, und wie Du siehst: ohne Argumente
Schreibs so:
Gruß, mawe
Na gut, schaun wir mal:
Code: Alles auswählen
....
def ChangeFolder():
global FolderToScan # Du erzeugst hier sonst eine neue lokale Variable mit gleichem Namen
FolderToScan = tkFileDialog.askdirectory()
....
while True: # nich true
...
#if _name_ == '_main_': # unnötig
# auf die Einrückung achten, def f ist auf der selben Ebene wie def watch_directories
def f (changed_files, removed_files):
print changed_files
print 'Removed', removed_files
#watch_directories([FolderToScan], f, 1) # unnötig
Code: Alles auswählen
RunScriptButton = Button(Mainwindow, text = "Run script", bg = "green", width = 25, height = 2,
command = watch_directories)
Schreibs so:
Code: Alles auswählen
RunScriptButton = Button(Mainwindow, text = "Run script",
bg = "green", width = 25, height = 2,
command = lambda: watch_directories[FolderToScan],f,1])
Beim RunscriptButton wird mir eine invalid Syntax angezeigt.
Liegt das am ] ?
Und def f muss genau unter def watch_directories liegen?
Erstes def f oder zweites?
Liegt das am ] ?
Und def f muss genau unter def watch_directories liegen?
Erstes def f oder zweites?
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Bevors zu kompliziert wird, hier mal der Code so wie er bei mir funktioniert:
Gruß, mawe
Bevors zu kompliziert wird, hier mal der Code so wie er bei mir funktioniert:
Code: Alles auswählen
from Tkinter import *
import sys
import tkFileDialog
import tkSimpleDialog
import os,time
FolderToScan = None
EmailAdress = None
def ChangeFolder():
global FolderToScan
FolderToScan = tkFileDialog.askdirectory()
def EmailAdress():
Subwindow1 = Tk()
Subwindow1.geometry("200x100+0+0")
Label1= Label(Subwindow1, text = "E-Mailadress :")
Label1.place(x = 5, y = 10)
EmailAdress = Entry(Subwindow1, width=30)
EmailAdress.place(x = 5, y = 35)
Subwindow1.mainloop()
def ChangeLogFolder():
FolderToSaveLog = tkFileDialog.askdirectory()
def watch_directories (paths , func, delay = 1.0):
all_files = {}
def f (unused, dirname, files):
for filename in files:
path = os.path.join(dirname, filename)
try:
t = os.stat(path)
except os.error:
continue
mtime = remaining_files.get(path)
if mtime is not None:
del remaining_files[path]
if t.st_mtime > mtime:
changed_list.append(path)
else:
changed_list.append(path)
all_files[path] = t.st_mtime
rescan = False
while True:
changed_list = []
remaining_files = all_files.copy()
all_files = {}
for path in paths:
os.path.walk(path, f, None)
removed_list = remaining_files.keys()
if rescan:
rescan = False
elif changed_list or removed_list:
rescan = func(changed_list, removed_list)
time.sleep(delay)
def f (changed_files, removed_files):
print changed_files
print 'Removed', removed_files
Mainwindow = Tk()
Mainwindow.geometry("400x200+0+0")
RunScriptButton = Button(Mainwindow, text = "Run script", bg = "green", width = 25, height = 2,
command = lambda:watch_directories([FolderToScan],f,1))
RunScriptButton.place(x = 25, y = 30)
StopScriptButton = Button(Mainwindow, text = "Stop script",bg = "red", width = 25, height = 2, command = sys.exit)
StopScriptButton.place(x = 215, y = 30)
ChangeFolderButton = Button(Mainwindow, text = "Change folder to scan", width = 25, command = ChangeFolder)
ChangeFolderButton.place(x = 25, y = 100)
ChangeMailAdressButton = Button(Mainwindow, text = "Change mailadress", width = 25, command = EmailAdress)
ChangeMailAdressButton.place(x = 215, y = 100)
ChangeLogButton = Button(Mainwindow, text = "Change destination of logfile", width = 25, command = ChangeLogFolder)
ChangeLogButton.place(x = 25, y = 150)
del FolderToScan
mainloop()