Seite 1 von 1
exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 07:11
von eyescube
Hallo ihr,
ich hab ein Problem mit dem exclude bei meinem Tarfile..
und zwar springt er immer in return fullpath. ich weis nur nicht warum das falsch läuft

ich war mir so sicher das er oben reinspringt.
ich hoffe jemand kann mir helfen denn egal ob ich if oder if not eingeb er führt sources und excludes nicht aus
Code: Alles auswählen
def get_path_if_not_excluded(self, dirname, filename):
fullpath = os.path.abspath(os.path.join(dirname, filename))
if not (os.path.isfile(fullpath) or os.path.isdir(fullpath)):
return None
for source in self.sources:
for exclude in self.allexcludes:
if fullpath.startswith(exclude):
return None
return fullpath
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 07:14
von frabron
Ohne genau nachvollziehen zu können was du da machst: Warum printest du nicht einfach mal deine Bedingungen und den fullpath, dann siehst du doch, warum etwas nicht funktioniert. Das ist einfachstes debugging ...
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 07:16
von eyescube
das hab ich schon bei dem probiert wenn ich if eingeb und print "test" gibt er test aus aber sobald ich if not eingeb springt er nach return none.
die excludes und die Sources lässt er einfach raus.
ausserdem lässt er wenn ich if drin lasse die Sicherung auf 1kb aber das sind mehr Dateien als nur n kb
Code: Alles auswählen
def add_file(self, args, dirname, filenames):
if self.backup_thread._Thread__stopped:
raise Exception('Stopping backup!')
for filename in filenames:
fullpath = self.get_path_if_not_excluded(dirname, filename)
print args[1]
if fullpath != None and (args[1] == None or os.path.getmtime(fullpath) >= args[1]):
#print os.path.getmtime(fullpath)
try:
args[0].add(fullpath)
except Exception, e:
print >> sys.stderr, 'ERROR: error while processing file "%s"!' % fullpath
hier is das "adden" der Tar-Files aber ich versteh einfach net wo mein Fehler liegen könnte

Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 07:46
von BlackJack
@eyescube: Du bist gerade wieder furchtbar ungenau bei der Beschreibung des Problems und was Du gemacht hast.
Du rufst das ja mit bestimmten Werten auf und erwartest ein bestimmtes Ergebnis. Geh den Code in Gedanken schritt für Schritt durch und überlege welcher Name zu welchem Zeitpunkt an welchen Wert gebunden ist. Und dann fügst Du ``print``-Anweisungen ein, welche die tatsächlichen Werte ausgeben und vergleichst die mit denen, die Du bei Deinen Überlegungen hattest. Dann siehst Du ja wo der Code und Deine Vermutungen auseinander laufen und kannst Überlegen warum das so ist, oder zur Not auch eine präzisere Frage stellen.
Wenn ich mal Vermuten müsste liegt das Problem bei den Schleifen. Das sieht nämlich teilweise unsinnig aus und ich habe da so eine Vermutung das der Test nicht das macht, bzw. auf den Daten ausgeführt wird, die Du denkst und haben möchtest. *Das* kannst *Du* aber auch ganz einfach durch die Ausgabe der Werte heraus finden.
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 07:48
von eyescube
BlackJack der Springt nicht in die for-schleife ich weis aber nicht warum denn er gibt wenn ich über der print fullpath eingeb und if einsetze kommt eben der Volle Pfad
bei if not springt er nach unten return fullpath
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:09
von Xynon1
Wenn er die for-Schleife nicht betritt, würde ich schlicht sagen "filenames" ist leer. Viel mehr gibt es da nicht zur Auswahl.
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:11
von eyescube
hm nein die filenames gibt er auch mit print aus
ich hab weiter unten noch das Codeschnipsel gefunden wo auch der Fehler sein könnte +grummel+
Code: Alles auswählen
print 'Starting backup to archive "%s"...' % self.current_archive
tar = None
try:
if not os.path.exists(os.path.dirname(self.current_archive)):
os.makedirs(os.path.dirname(self.current_archive))
tar = tarfile.open(self.current_archive, 'w:bz2')
for directory in self.sources:
os.path.walk(directory, self.add_file, (tar, since_date))
print 'Backup to archive "%s" complete.' % self.current_archive
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:14
von BlackJack
@eyescube: Die ``for``-Schleife wird ausgeführt -- es wird nicht einfach so Quelltext übersprungen oder nicht ausgeführt. Es kann sein das der Körper der Schleife nicht ausgeführt wird, aber dann hat das ja einen Grund. Der Schleifenkörper wird so oft ausgeführt wie Elemente in dem "iterable" nach dem ``in`` enthalten sind. Nun erklär doch mal was `self.sources` enthält. Und dann gib das vor der Schleife mal aus und schau ob es das ist was Du glaubst was es ist.
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:17
von eyescube
sources ist erst der Ordner C:\\
dann wird self.sources=sources
exclude is z.b. C:\Windows
wird
Code: Alles auswählen
self.excludes = excludes
if os.path.isabs(config_file):
self.config_file = config_file
else:
self.config_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), config_file)
if os.path.isabs(date_file):
self.date_file = date_file
else:
self.date_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), date_file)
self.choices = choices
self.compressed = compressed
self.allexcludes = (os.path.abspath(os.path.join(source, exclude)) for source in self.sources for exclude in self.excludes)
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:22
von Xynon1
BlackJack schäm dich, das hättest du doch
noch Wissen müssen. Nur das jetzt überall noch ein self dazu gekommen ist.

Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:23
von eyescube
hätte er nich.....
er muss sich nich alles merken mir isses halt nur aufgefallen das die excludes einfach net übernommen werden...
die Sicherung an sich läuft nur die excludes bleiben nicht raus.
und die sources sind anders definiert.
hab das komplette script anders verfasst
ah ok Fehler gefunden Danke
Re: exclude problem bei Tarfile
Verfasst: Freitag 15. April 2011, 08:39
von Xynon1
Ja, genau wie dein Schreibstil.
Mal ernsthaft, erwartes du wirklich das wir das so einfach lösen können/wollen, obwohl uns 'zig Informationen fehlen. Wir haben noch nicht mal eine genaue Fehlerbeschreibung geschweige denn den eigentlichen Quellcode mal wirklich gesehen bzw. sehen wollen.
Bau dir ein minimal Beispiel das exakt das gleiche macht nur in einem kleineren Rahmen, dann kann man wenigsten Nachvollziehen was eigentlich passieren soll.