Hallo,
ich wollte generell fragen ob es eine Möglichkeit gibt bei einer Tar-Sicherung die % anzeigen zu können oder nicht? Wenn ja habt ihr Beispiele oder Doku darüber?
tar-Modul & Prozentanzeige
-
BlackJack
@eyescube: Generell gibt es die Möglichkeit so etwas selber zu implementieren. Dazu müsstest Du die zu sichernde Verzeichnisstruktur selber vorher einmal durchgehen und die Dateien zählen oder die Dateigrössen aufsummieren, damit Du weisst was 100% sind. In einem zweiten Durchgang kannst Du die Dateien dann hinzufügen und immer ausgeben wie viel Prozent davon schon hinzugefügt wurden.
Ich habe so etwas mal in diesem Skript gemacht: https://bitbucket.org/blackjack/rtar.py/src
Ich habe so etwas mal in diesem Skript gemacht: https://bitbucket.org/blackjack/rtar.py/src
Cool Danke hab mir auch grad was gebastelt nur was heissen diese Fehler
ja das ich auf Linux grad arbeite is ok aber warum erscheint der Rest hast jmd vll ne Idee und könnte mir das näher erklären? danke
Code: Alles auswählen
python test.py
sh: C:WINDOWSsystem32ipconfig.exe: Kommando nicht gefunden.
PROGRESS: 100%
ERROR: No autostart entry could be created!
Traceback (most recent call last):
File "test.py", line 494, in <module>
Backup(lock, sources, excludes, config_file, date_file, choices, compressed).main_loop()
File "test.py", line 353, in main_loop
choice, date, self.target_dir = self.read_config()
File "test.py", line 120, in read_config
print >> sys.stderr, '''Error: File "%s" (configuration file) couldn't be read!\nQuitting.''' % self.config_file
AttributeError: Backup instance has no attribute 'config_file'
Wir kennen deinen Code nicht. Vielleicht hast du einen anderen Fehler der fälschlicherweise zur Ausgabe dieser Fehlermeldung führt. Das wilde Abfangen von Exceptions ohne genaue Angabe der Ausnahme ist in diesem Kontext ein typisches Problem.eyescube hat geschrieben:ich verstehs nur nicht weil die Datei existiert
Irgendetwas ist da verkorkst. Alleine schon die Tatsache, dass du im Backup-Object ein nicht vorhandenes Attribut namens config_file erwartest, deutet auf ein Problem hin.
das is der Teil der ständig angemeckert wird:
Danke Black wusste nicht wie das geht. 
Code: Alles auswählen
def read_config(self):
choice, date, dest = None, None, None
try:
file = open(self.config_file)
for line in file.readlines():
if line.lower().strip().startswith("boottime"):
choice = re.split('^boottime\s*=\s*([0-9]+)', line.lower().strip())[1]
elif line.lower().strip().startswith("destination="):
dest = re.split('^[dD][eE][sS][tT][iI][nN][aA][tT][iI][oO][nN]\s*=\s*(.+)\s*$', line.strip())[1].replace('\\', os.path.sep) #.replace('DAVID-NEU','mnt')
file.close()
except Exception, e:
print >> sys.stderr, '''Error: File "%s" (configuration file) couldn't be read!\nQuitting.''' % self.config_file
try:
self.lock.remove()
except Exception, e:
pass
exit(1)
try:
file = open(self.date_file)
for line in file.readlines():
if line.lower().strip().startswith("sidate"):
try:
date = time.mktime(time.strptime(re.split('^sidate\s*=([0-9]{2}\.[0-9]{2}\.[0-9]{4})?$', line.lower().strip())[1], '%d.%m.%Y'))
break
except Exception, e:
date = None
except Exception, e:
print >> sys.stderr, '''Error: File "%s" (configuration file) couldn't be read!\nQuitting.''' % self.date_file
try:
self.lock.remove()
except Exception, e:
pass
exit(1)
return choice, date, dest
Zuletzt geändert von Anonymous am Mittwoch 6. April 2011, 09:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Grund: Quelltext in Python-Code-Tags gesetzt.
-
BlackJack
@eyescube: Wie schon gesagt wurde ist es keine gute Idee einfach sehr grosszügig Ausnahmen abzufangen und dann zu ignorieren oder durch eine allgemeine Fehlermeldung zu ersetzen, die nichts mehr über die eigentliche Ursache verrät. Wenn man schon sehr grosszügig Ausnahmen behandelt, sollte man auch ausgeben welche genau aufgetreten ist. Bei Dir klappt das `open()` schon nicht weil es das Attribut `self.config_file` nicht gibt. Genau dieser `AttributeError` führt zu der Ausgabe das die Datei nicht gelesen werden kann. Nur kann die Meldung nicht ausgegeben werden, weil ja eben genau das `self.config_file` nicht existiert was Du in die Meldung einbauen willst.
Edit: Du scheinst `re.split()` zu Deiner Wunderwaffe erklärt zu haben -- das ist es nicht. Zumal durch die Vorprüfung mit `startswith()` auch mindestens ein regulärer Ausdruck viel zu weit und kompliziert gefasst ist. Wenn eine Zeichenkette mit 'destination=' beginnt, dann ist es unsinnig im regulären Ausdruck auf Grossbuchstaben und Leerraum vor dem '=' zu testen.
Die Methode macht zu viel auf einmal. Sie enthält zwei Quelltextblöcke die von der äusseren Struktur ziemlich gleich aussehen -- solche Wiederholungen sollte man vermeiden zum Beispiel in dem man gemeinsamen Code in eine Funktion heraus zieht oder die unterschiedlichen Daten über eine Schleife in den Code bringt.
Der `readline()`-Aufruf auf den Dateiobjekten ist unnötig weil Dateiobjekte "iterable" sind und beim iterieren die Zeilen in der Datei liefern.
Edit: Du scheinst `re.split()` zu Deiner Wunderwaffe erklärt zu haben -- das ist es nicht. Zumal durch die Vorprüfung mit `startswith()` auch mindestens ein regulärer Ausdruck viel zu weit und kompliziert gefasst ist. Wenn eine Zeichenkette mit 'destination=' beginnt, dann ist es unsinnig im regulären Ausdruck auf Grossbuchstaben und Leerraum vor dem '=' zu testen.
Die Methode macht zu viel auf einmal. Sie enthält zwei Quelltextblöcke die von der äusseren Struktur ziemlich gleich aussehen -- solche Wiederholungen sollte man vermeiden zum Beispiel in dem man gemeinsamen Code in eine Funktion heraus zieht oder die unterschiedlichen Daten über eine Schleife in den Code bringt.
Der `readline()`-Aufruf auf den Dateiobjekten ist unnötig weil Dateiobjekte "iterable" sind und beim iterieren die Zeilen in der Datei liefern.
Schön für dich. Du solltest trotzdem die strukturellen Probleme, die Blackjack angesprochen hat, abarbeiten. Alleine schon dieseseyescube hat geschrieben:ok hab nun von meinem alten noch funktionierenden Script den Teil nochma kopiert und das neue hinzugefügt und nun funktioniert es
Code: Alles auswählen
except Exception, e:Code: Alles auswählen
except KeyError as e:ja ich merks es bleibt bei dem Fehler nun also werd ich wohl self.config rausschmeissn und einfach als "config" drin lassen wie soll ichs sonst abändern?...
Weiter oben was man am Code nicht sieht hab ich eingefügt:
if os.path.isabs(config_file)
self.config_file= config_file
also deklariert isses.
soll ich mal den Kompletten Code posten?
wenn ich das print auskommentier bekomm ich gar keine Fehler mehr.
10:40 Fehler beseitigt dafür is mir was anderes aufgefallen. also könnt Thread Schließen wenn ihr wollt.
config_file="datei.ini"
Weiter oben was man am Code nicht sieht hab ich eingefügt:
if os.path.isabs(config_file)
self.config_file= config_file
also deklariert isses.
soll ich mal den Kompletten Code posten?
wenn ich das print auskommentier bekomm ich gar keine Fehler mehr.
10:40 Fehler beseitigt dafür is mir was anderes aufgefallen. also könnt Thread Schließen wenn ihr wollt.
config_file="datei.ini"
Zuletzt geändert von eyescube am Donnerstag 7. April 2011, 09:41, insgesamt 2-mal geändert.
-
BlackJack
@eyescube: Variablen/Attribute werden in Python nicht deklariert. Wenn man ein Attribut an einen Wert bindet, existiert es, wenn man das nicht tut, existiert es nicht. In den beiden Zeilen (die syntaktisch nicht ganz korrekt sind) hängt es ganz offensichtlich davon ab, ob `config_file` an einen absoluten Pfad gebunden ist, ob `self.config_file` an diesen Wert gebunden wird. Wird das denn irgendwo anders an einen Wert gebunden wenn `config_file` *kein* absoluter Pfad ist?
