exclude problem bei Tarfile

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

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
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

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 ...
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

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 :(
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.
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

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
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Wenn er die for-Schleife nicht betritt, würde ich schlicht sagen "filenames" ist leer. Viel mehr gibt es da nicht zur Auswahl.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

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
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.
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

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)
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

BlackJack schäm dich, das hättest du doch noch Wissen müssen. Nur das jetzt überall noch ein self dazu gekommen ist. :twisted:
Zuletzt geändert von Xynon1 am Freitag 15. April 2011, 08:23, insgesamt 1-mal geändert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

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
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten