Seite 1 von 2
Variable verloren oder Variable ignoriert?!
Verfasst: Mittwoch 20. Juli 2011, 09:25
von bluelagoon
Hallo,
ich arbeite und bau gerade mein Sicherungsscript um.
Mein Problem ist folgendes ich habe Sources und Excludes.
Excludes sind Dateien die nicht gesichert werden und Sources wird gesichert. Nun schreib ich beide Sachen in eine Datei und lese diese wiederrum aus was bei Sources gut funktioniert aber bei Excludes wird es ausgelesen und die Sicherung wird "zerstört". Quasi zeigt er an 0 Bytes gesichert. Geb ich Excludes an wie z.b. #excludes = ['C:\\Windows\\', 'C:\\Temp\\' , 'C:\\TMP\\', 'C:\\$recycle.bin', 'C:\\PerfLogs','C:\\Python26\\david-neu','C:\\SYSINFO','C:\\python31', 'c:\\dokumente und einstellungen\\', 'c:\\recycled','c:\\python26\\','C:\\ATI','c:\\python31\\']
Sichert er und die Datei ist ca 7-8 mb.
es kann eigentlich nur an Excludes fehlen denn die Sources wird aus der Datei geholt.
hier die beiden Dateien:
dp_excludes.ini: excludes = 'C:\\Windows\\', 'C:\\Temp\\' , 'C:\\TMP\\', 'C:\\$recycle.bin', 'C:\\PerfLogs','C:\\Python26\\david-neu','C:\\SYSINFO','C:\\python31', 'c:\\dokumente und einstellungen\\', 'c:\\recycled','c:\\python26\\','C:\\ATI','c:\\python31\\'
dp_source.ini sources ='C:\\'
Hat jemand ne Idee was ich hier falsch mache?

liegts vll daran das sources nur c:\\ enthält und excludes mehrere Variablen?
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Mittwoch 20. Juli 2011, 10:33
von BlackJack
@bluelagoon: Überleg doch mal was der Typ von dem Objekt ist, was jeweils an `exclude` gebunden ist, wenn Du es so aus der Datei liest, verglichen mit dem Typ, wenn Du die auskommentierte Zeile verwendest.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Mittwoch 20. Juli 2011, 10:35
von bluelagoon
ich glaub das splitten das Problem ist.
Nur ich versteh nicht warum. Vorallem er nimmt ab und an auch einfach die sources und sagt sources is excludes o.o.
Sieht so aus als will er einfach nur eine Datei verwenden wollen.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Mittwoch 20. Juli 2011, 10:38
von /me
bluelagoon hat geschrieben:Code: Alles auswählen
elif 'windows' in platform.system().lower():
# which directories and files shoud be backed up?
excludes_file_list='dp_excludes.ini'
file=open(excludes_file_list)
for line1 in file.readlines():
if line1.lower().strip().startswith("excludes"):
excludes = re.split('excludes=\s*', line1.lower().strip())[1]
file.close()
Der Code ist ziemlich grausam in Bezug auf die Wahl der Namen der Bezeichner, die Umsetzung und die Einrückung und deine Vorstellung davon, wie dein Programm arbeitet passt auch nicht.
Du liest eine einzige Zeile aus die wie folgt aussieht:
Code: Alles auswählen
excludes = 'C:\\Windows\\', 'C:\\Temp\\' , 'C:\\TMP\\', 'C:\\$recycle.bin', 'C:\\PerfLogs','C:\\Python26\\david-neu','C:\\SYSINFO','C:\\python31', 'c:\\dokumente und einstellungen\\', 'c:\\recycled','c:\\python26\\','C:\\ATI','c:\\python31\\'
Da wäre schon einmal die Frage zu stellen, was die doppelten Backslashes da sollen. Jetzt zerlegst du die Zeile und schreibst den Teil hinter dem Gleichheitszeichen in einen String, möchtest ihn aber wie eine Liste verwenden. Mach eine Liste daraus, dann passt das.
... und verwende file nicht als Bezeichnernamen
... und verwende with
... und rücke einheitlich ein
... und verwende keine regulären Ausdrücke, wenn sie nicht nötig sind
... und ...
sorry, ich muss offline.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Mittwoch 20. Juli 2011, 10:44
von bluelagoon
Ohne die doppelten Backslashes Funktioniert die Sicherung nicht.
Was ich mir vorstelle?
Mein Programm soll aus einer Datei die Sources und die Excludes lesen und evtl sichern oder nicht.
warum is der Code schlimm? wenn ich einrücke meckert der Interpreter und da kann ich doch nichts dafür :K
und warum ich file als Namen nehm? weil ich erst teste bevor ich Variablen andere Namen geb.
gut er liest eine komplette Zeile aus. Was meinst du mit Liste? Ich will doch lieber bei Zeile bleiben auch wenn ich diese dann 100 mal Splitten müsste.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Mittwoch 20. Juli 2011, 15:15
von /me
bluelagoon hat geschrieben:Ohne die doppelten Backslashes Funktioniert die Sicherung nicht.
[...]
warum is der Code schlimm? wenn ich einrücke meckert der Interpreter und da kann ich doch nichts dafür :K
und warum ich file als Namen nehm? weil ich erst teste bevor ich Variablen andere Namen geb.
gut er liest eine komplette Zeile aus. Was meinst du mit Liste? Ich will doch lieber bei Zeile bleiben auch wenn ich diese dann 100 mal Splitten müsste.
Die doppelten Backslashes brauchst du, wenn du im Code einen Backslash escapen möchtest. Wenn du externe Daten einliest liegen diese bereits passend vor.
Deine Einrückungen haben unterschiedliche Tiefe. Eventuell mischst du Tabulatoren und Leerzeichen.
file ist der Name eines Builtins. Es ist nicht sinnvoll, diesen zu überschreiben.
Was soll jetzt "Was meinst du mit Liste?" heißen? Du hast doch selber gesagt, dass der Code funktioniert wenn du fest codiert eine Liste in der folgenden Form angibst:
Jetzt liest du aber aus der Datei einen String ein und weist einen Teil davon dem Bezeichner
excludes zu. Du hast also überhaupt keine Liste vorliegen. Mach eine passende Liste aus dem String.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Donnerstag 21. Juli 2011, 07:22
von bluelagoon
naja selbst wenn ich nur einen einzigen Ordner in der Datei angeb bleibt die Sicherung 1kb groß und nichts ist drin also leer.
auch wenn ich nur angeb: excludes = 'C:\Windows\'
wie gesagt es liegt nur an den Excludes mit sources funktioniert es.
Code: Alles auswählen
und ein extra-block für Sources hab ich auch. :/ Langsam aber sicher verzweifel ich hier!
Versuche:
excludes = ['C:\Windows']
excludes='C:\Windows'
excludes= C:\Windows
egal wie es funktioniert nicht :/
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Donnerstag 21. Juli 2011, 09:01
von /me
bluelagoon hat geschrieben:Versuche:
excludes = ['C:\Windows']
excludes='C:\Windows'
excludes= C:\Windows
egal wie es funktioniert nicht :/
Du hast in diesem Forum schon viele Tipps erhalten und üblicherweise hast du sie nie umgesetzt. Deine Beschreibung macht sehr deutlich, dass das ganz offensichtlich daran liegt, dass dir elementare Grundlagen fehlen. Du rätst was in deinem Code passiert, aber du verstehst es nicht.
Ich werde dir einen letzten Tipp geben. Arbeite das
Tutorial durch und verstehe es.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Donnerstag 21. Juli 2011, 09:05
von bluelagoon
/me
ich habs nun versucht als Liste und trotzdem geht es nicht.

in dem Tutorial steht ja sowas auch nicht drin wie sowas funktionieren könnte
da hier mir irgendwie keiner zeigen kann was mein Problem sein könnte bin ich wieder weg hier.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Donnerstag 21. Juli 2011, 12:00
von BlackJack
@bluelagoon: Was heisst Du hast es als Liste versucht? Ist der Datentyp von dem Objekt das an `excludes` gebunden ist, *tatsächlich* `list`? Wie hast Du das hinbekommen? Wie hast Du es überprüft? Enthält die Liste die richtigen Daten?
Im Tutorial steht natürlich nicht wie die konkrete Lösung für jedes Problem aussieht, aber dort lernt man welche grundlegenden Datentypen es gibt, und was man mit denen anstellen kann. Wenn Du in dem gezeigten Quelltext mal eine Zeichenkette und mal eine Liste an einen Namen bindest, und Dir nicht klar ist, warum das unterschiedliche Ergebnisse zur Folge hat, dann fehlen Dir ganz wichtige Grundlagen. Deswegen der Hinweis auf das Tutorial.
Dein Problem ist, dass Du Dich weigerst Ratschläge anzunehmen, die nicht aus einer kompletten, vorgekauten Lösung bestehen, sondern verstehen von Python und Programmierung, und eigenständiges Nachdenken erfordern. *Das* wurde Dir aber AFAIK auch schon mehrfach gesagt.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 07:19
von bluelagoon
na die Liste hab ich so erfasst
excludes='C:\Windows\'
excludes='C:\TMP'
excludes='C:\TEMP'
Aber die richtigen Daten sind es denn wenn ichs ohne der Datei ausführe im Script kommen die Daten auch nicht mit in die Sicherung.
Ich hab damals excludes einfach in die [] erfasst und später
self.allexcludes = [os.path.normcase(os.path.abspath(exclude)) for source in self.sources for exclude in self.excludes]
in den Code gepackt.
weitergekommen bin ich noch nicht ich versteh nicht warum es einfach nicht funktioniert, auch nach dem Tutorial nicht.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 07:41
von BlackJack
@bluelagoon: Ich nehme mal an die ``excludes``-Zeilen stehen so in der Konfigurationsdatei!? Und im Quelltext wo Du die einliest, sorgst Du dann dafür, dass die einzelnen Werte an eine Liste angehängt werden? Und Du hast das Ergebnis auch mal mit dem verglichen, was Du vorher direkt als Liste in den Quelltext geschrieben hast? Und da ist wirklich kein Unterschied?
Wie die `self.allexcludes`-Liste erstellt wird, ist eigenartig. Was soll das denn bitte bewirken? Welchen Sinn hat dieses Konstrukt? Weisst Du was da rauskommt? Hast Du das mal überprüft, ob es Deinen Erwartungen entspricht, und ob das so überhaupt sinnvoll ist? Der Wert von `source` wird dort überhaupt nicht verwendet. Wenn `self.sources` an eine Sequenz gebunden ist, von der man die Länge erfragen kann, ist das äquivalent zu folgendem:
Code: Alles auswählen
self.allexcludes = [os.path.normcase(os.path.abspath(exclude)) for exclude in self.excludes] * len(self.sources)
Die gleichen Pfade sind dort also mehrfach enthalten — so oft wie es Elemente in `self.sources` gibt.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 07:59
von bluelagoon
so also die Sicherung an sich läuft nun aber nun hab ich excludes wieder drin.. .....
die Datei hat gerade nur eine Datei erhalten nämlich 'C:\Windows\'
und er springt später in meine Fehlermeldung das nicht gesichert werden kann da der Prozess läuft

Wenn die Sicherung fertig ist und ich mir das anseh ist diese SCH**** Exclude drin -.-
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 08:24
von EyDu
Hallo.
Jetzt solltest du dir natürlich die Frage stellen, warum nur die letzte Datei in der Liste enthalten ist, wenn du über alle Einträge iterierst und am Ende einen Eintrag in die Liste schreibst

Ist es wirklich so schwer einfach mal ein `print` zwischen jede Zeile einzufügen und sie den Inhalt aller Variablen ausgeben zu lassen? Dann kommt man nämlich ganz schnell auf die Lösung.
Dein `excludes = excludesList` zeugt auch nicht gerade davon, dass du verstehst was dort eigentlich passiert. Wie gesagt: gehe die achte Zeilen Schritt für Schritt mit `print`s durch, dann solltest du deinen offensichtlichen Fehler bemerken.
Sebastian
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 08:31
von bluelagoon
weil ich nur eine Datei angegeben hab deswegen ist die auch in der Liste als einzige drin?!
aber wie bring ich das hin das ich unabhängig wie viele Zeilen ich in die Datei schreib alle genommen werden OHNE das ich jeder Zeile nen Wert zuweise? das steht nämlich nirgends mal wieder

ich muss die Liste ja an excludes übergeben ich änder doch net 500 mal excludes im script ab o.o
In VB.net sag ich auch Variable ist dann andere Variable genauso wie in PHP
Ausgabe:
'C:\Windows'
["'C:\Windows'"]
["'C:\Windows'"]
Ahhhh Fehler gefunden man darf nicht 'C:\windows' angeben in der Datei ah ok aber wie sag ich nun lies alles aus unabhängi davon wie viele Zeilen? :/
und ich versteh nicht ganz warum er nur die letzte Datei nimmt
die liste ist nun so:
excludes= C:\Windows
excludes = C:\Temp\
excludes = C:\TMP\
excludes = C:\$recycle.bin
excludes = C:\PerfLogs
excludes = C:\Python26
excludes = C:\SYSINFO
excludes = C:\python31
excludes = c:\dokumente und einstellungen\
excludes = c:\recycled
excludes = c:\python26\
excludes = C:\ATI
excludes = c:\python31\
mir ist schon klar das er nach excludes splittet und den wert nimmt der letzten Zeile aber gibts nen Befehl das er jedes Wort mitnimmt?
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 08:58
von BlackJack
@bluelagoon: Es nützt nicht viel Dir zu sagen wie es geht. Wenn Du *da* nicht selber drauf kommst, bist Du einfach nicht in der Lage zu programmieren.
Mach Dir doch mal Schritt für Schritt klar was da abläuft. Wann welcher Wert an den Namen `exclude` gebunden ist und wann Du welchen Wert der Liste hinzufügst. Das ist *so* offensichtlich. Das steht natürlich auch nirgends in Tutorials, weil das ganz gewöhnliches logisches Denken ist. Das Prinzip von Ursache und Wirkung. Wenn Du nur einmal etwas an eine Liste anhängst, dann ist da selbstverständlich auch nur ein Element drin. Wenn Du mehrere Elemente in der Liste haben willst, dann musst Du auch alle Elemente, die Du da drin haben willst, hinein tun.
Das ist sowohl in VB.net als auch in PHP genau so.
Edit: Nein es gibt keinen Befehl der ein Programm auf magische Weise das tun lässt, was Du haben möchtest. Du musst das Programm so schreiben, dass der Programmablauf in einer Weise stattfindet, dass das gewünschte Ergebnis heraus kommt. Du musst Dir überlegen wie das Ergebnis aussehen soll, und in welcher Reihenfolge man dafür dann welche Operationen ausführen muss, um zu diesem Ergebnis zu kommen. Diesen Vorgang nennt man auch allgemein Programmieren. Und der lässt sich nicht durch einen Befehl ersetzen.
Wenn Du meinst das wäre in VB.NET oder PHP besser/einfacher, dann schreib es doch mal in einer dieser beiden Sprachen.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 09:04
von bluelagoon
auf gut deutsch kann ich 100 mal
kopieren und exclude umbenennen und dann mit append an die liste hängen oder wie soll ich das verstehen?
wenn ich excludes[1,2,3,4,5,] etc angeb bekomm ich ja auch n Fehler also hab ich mir überlegt die Daten in eine Zeile zu schreiben jedoch muss ich dann die Zeile 2 mal splitten. Oder hat jemand ne Idee ( nein ich will kein Code wissn der is mir scheiss egal) wie man sowas noch umsetzen kann?
mir bringts nix weil ich so viel in das Script zeit gesteckt hab DASS!!! ich nicht die Zeit vergeudet haben will.
ich hab excludes geändert alles gelöscht nur 2 Dateien angegeben ohne splitten ohne alles und was macht python?
gibt beide Dateien richtig aus aber ignoriert einfach das es nicht in die excludes darf! ich geb doch an nach dem splitt verwende Variable würd ichs in excel packen würd ich splitten nach " " Leerzeichen. aber hier müsste ich wenn dann exclude nochma nehmen nochma splitten is doch auch schwachsinnig ne Variable 2 mal hintereinander zu splitten
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 10:20
von BlackJack
@bluelagoon: Du musst nicht Quelltext 100 mal kopieren, sondern den, welchen Du bereits hast, musst Du verstehen und entsprechend anpassen. Dazu musst Du den Ablauf von Code verstehen. Was in welcher Reihenfolge und unter welchen Bedingungen ausgeführt wird. Das sind Grundlagen, die in entsprechenden Grundlagentutorials erarbeitet werden können. Du musst in der Lage sein einfache Quelltextabschnitte zu sehen und ohne sie auf dem Rechner auszuführen, sagen können welche Werte zu jedem Zeitpunkt an welchen Namen gebunden sind. Du musst sagen können was hierbei heraus kommt und warum, also wie der Weg zu dem Ergebnis aussieht:
Code: Alles auswählen
for i in xrange(10):
if i % 2 == 0: # Test ob `i` gerade ist.
n = i * i
squares = list()
squares.append(n)
print squares
Und Du musst das so Umschreiben können, das am Ende `squares` die Quadratzahlen aller geraden `i`\s enhtält. Und zwar nicht in dem Du irgendwelchen Code entsprechend oft kopierst! Solange Du das nicht hinbekommst, brauchst Du an Deinem Sicherungsskript nicht weiter machen. Das bringt nichts.
Wenn Du alle Pfade in eine Zeile in die Konfigurationsdatei schreibst, dann ist das Leerzeichen als Trenner ungeeignet, denn es gibt Pfade die Leerzeichen enthalten. ``Eigene Dateien\`` zum Beispiel.
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 10:29
von bluelagoon
ja ich weis was der Code macht der Code springt immer runter bis er keine Zeile mehr mit excludes findet und splittet und nimmt dann die Datei. Naja stimmt an Eigene Dateien hab ich grade nicht gedacht aber an ,
Re: Variable verloren oder Variable ignoriert?!
Verfasst: Freitag 22. Juli 2011, 11:25
von sparrow
@bluelagoon: um eine Verständnis für das zu bekommen was der Code macht solltest du hinter jede Zeile einen Kommentar schreiben was du erwartest was dort passiert.
Dann sollte dir selbst relativ schnell auffallen, dass da etwas nicht stimmt.