[gelöst]IndentationError:unter Python?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Strunz_1975
Beiträge: 2512
Registriert: 13.04.2007 14:29:32
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

[gelöst]IndentationError:unter Python?

Beitrag von Strunz_1975 » 01.12.2019 12:20:52

Hallo,

ich nutze diesen Link hier:
https://forum.ubuntuusers.de/topic/deja ... erherstel/
Wenn ich dann das "Python-Script" ausführe, kommt folgende Fehlermeldung:

Code: Alles auswählen

File "recover.py", line 33
    for (path, dirs, files) in os.walk(TO_MULTI) :
                                                 ^
IndentationError: unindent does not match any outer indentation level

[/code}

Was muss ich tun?

Mfg
Strunz_1975
Zuletzt geändert von Strunz_1975 am 03.12.2019 19:32:59, insgesamt 1-mal geändert.
Debian Bookworm

Benutzeravatar
tegula
Beiträge: 440
Registriert: 04.06.2004 13:51:04
Lizenz eigener Beiträge: MIT Lizenz

Re: IndentationError:unter Python?

Beitrag von tegula » 01.12.2019 13:28:43

Die Einrückungen scheinen im von dir verlinkten Script [1] auf den ersten Blick nicht fehlerhaft zu sein. Könnte es sein, dass du einen Fehler beim Kopieren des Scripts gemacht hast?

BTW: Dem Script fehlen die Klammern beim print-Befehl. In der Folge funktioniert es nur mit Python 2.7, aber nicht mehr mit aktuellen Python-Versionen (3.x) [2] [3]

[1] https://forum.ubuntuusers.de/topic/deja ... post-65996
[2] https://en.wikipedia.org/wiki/History_o ... patibility
[3] https://www.python.org/dev/peps/pep-037 ... e-releases

Benutzeravatar
Strunz_1975
Beiträge: 2512
Registriert: 13.04.2007 14:29:32
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: IndentationError:unter Python?

Beitrag von Strunz_1975 » 01.12.2019 13:33:46

Und wie rufe ich dann das "Python"-Script auf einer Kommandozeile auf?

python scriptname ???

Ich habe es geändert, so sieht es jetzt aus:

Code: Alles auswählen

#!/usr/bin/env python
import os

FROM = '/media/werner/USB'

TO_TMP = '/home/werner/'

TO_MULTI = TO_TMP + '/multivol_snapshot'
TO_SNAP = TO_TMP + '/snapshot'


def do(stuff):
    print(stuff)
    os.system(stuff)

def m2s(path):
    assert path.startswith(TO_MULTI), 'It must be a multivol path'
    tmp = path.replace(TO_MULTI, TO_SNAP, 1)
    if tmp.endswith('/'):
        tmp = tmp[:-1]
    return tmp


def main():
    # restore broken dejadup / duplicity fullbackup without manifest
    # Step One
    # untar 
     os.chdir(TO_TMP)
     do("for t in \"" + FROM + "/\"*.difftar; do echo $t; "
        "tar xvfi \"$t\"; done;")
    # Step Two
    # join multipart files
    for (path, dirs, files) in os.walk(TO_MULTI):
          print(path)
           if len(dirs) == 0:
		# add leading zeros for more than 10 parts
               for f in files:
                 os.rename(os.path.join(path, f),os.path.join(path, str(f).zfill(10)))	
                # we need to combine all these elements
               do("cat \"" + path + "\"/* > \"" + m2s(path) + "\"")
            #do("rm *")
        else:
            do("mkdir -p \"" + m2s(path) + "\"")


if __name__ == '__main__':
    main()

Es funktioniert immer noch nicht!
Debian Bookworm

Benutzeravatar
TRex
Moderator
Beiträge: 8316
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: IndentationError:unter Python?

Beitrag von TRex » 01.12.2019 17:45:08

Wie auch in dem anderen Thread...

Ausgaben, Fehlermeldungen, ... du kannst das gerne weglassen, aber dann ists halt kacke.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: IndentationError:unter Python?

Beitrag von cronoik » 01.12.2019 18:03:15

Ich habe es mir inhaltlich nicht weiter angesehen, aber mal ordentlich eingerueckt.

Code: Alles auswählen

#!/usr/bin/env python
import os

FROM = '/media/werner/USB'

TO_TMP = '/home/werner/'

TO_MULTI = TO_TMP + '/multivol_snapshot'
TO_SNAP = TO_TMP + '/snapshot'

def do(stuff):
    print(stuff)
    os.system(stuff)

def m2s(path):
    assert path.startswith(TO_MULTI), 'It must be a multivol path'
    tmp = path.replace(TO_MULTI, TO_SNAP, 1)
    if tmp.endswith('/'):
        tmp = tmp[:-1]
    return tmp


def main():
    # restore broken dejadup / duplicity fullbackup without manifest
    # Step One
    # untar 
    os.chdir(TO_TMP)
    do("for t in \"" + FROM + "/\"*.difftar; do echo $t; tar xvfi \"$t\"; done;")
    # Step Two
    # join multipart files
    for (path, dirs, files) in os.walk(TO_MULTI):
        print(path)
        if len(dirs) == 0:
		# add leading zeros for more than 10 parts
            for f in files:
                os.rename(os.path.join(path, f),os.path.join(path, str(f).zfill(10)))	
                # we need to combine all these elements
                do("cat \"" + path + "\"/* > \"" + m2s(path) + "\"")
            #do("rm *")
        else:
            do("mkdir -p \"" + m2s(path) + "\"")


if __name__ == '__main__':
    main()
Hilf mit unser Wiki zu verbessern!

Benutzeravatar
Strunz_1975
Beiträge: 2512
Registriert: 13.04.2007 14:29:32
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: IndentationError:unter Python?

Beitrag von Strunz_1975 » 03.12.2019 18:32:47

tegula hat geschrieben: ↑ zum Beitrag ↑
01.12.2019 13:28:43
Die Einrückungen scheinen im von dir verlinkten Script [1] auf den ersten Blick nicht fehlerhaft zu sein. Könnte es sein, dass du einen Fehler beim Kopieren des Scripts gemacht hast?

BTW: Dem Script fehlen die Klammern beim print-Befehl. In der Folge funktioniert es nur mit Python 2.7, aber nicht mehr mit aktuellen Python-Versionen (3.x) [2] [3]

[1] https://forum.ubuntuusers.de/topic/deja ... post-65996
[2] https://en.wikipedia.org/wiki/History_o ... patibility
[3] https://www.python.org/dev/peps/pep-037 ... e-releases
Hallo,

muss ich "Python 3" löschen oder wie gehe ich vor?
Debian Bookworm

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: IndentationError:unter Python?

Beitrag von cronoik » 03.12.2019 19:06:02

Nimm doch einfach mal das von mir gepostete Skript und fuehre es mit python aus. Vom Loeschen laesst du bitte die Finger.
Hilf mit unser Wiki zu verbessern!

Benutzeravatar
Strunz_1975
Beiträge: 2512
Registriert: 13.04.2007 14:29:32
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: IndentationError:unter Python?

Beitrag von Strunz_1975 » 03.12.2019 19:30:08

cronoik hat geschrieben: ↑ zum Beitrag ↑
03.12.2019 19:06:02
Nimm doch einfach mal das von mir gepostete Skript und fuehre es mit python aus. Vom Loeschen laesst du bitte die Finger.
Ich habe es hinbekommen, danke für deine Hilfe!

Mfg
Strunz_1975
Debian Bookworm

rodney
Beiträge: 370
Registriert: 09.12.2016 04:15:59

Re: [gelöst]IndentationError:unter Python?

Beitrag von rodney » 03.12.2019 20:15:13

Und wie hast du dein Problem geloest? Den Titel mit "[geloest]" erweitern suggestiert anderen Hilfesuchenden dort eventuell eine Loesung eines aehnlichen Problems zu finden. Waerst du bitte so nett deine Loesung auch Anderen zur Verfuegung zu stellen?

Benutzeravatar
towo
Beiträge: 4541
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: [gelöst]IndentationError:unter Python?

Beitrag von towo » 03.12.2019 20:18:40

Das hat er noch nie gemacht, guck dir alle seine anderen Threads an.

rodney
Beiträge: 370
Registriert: 09.12.2016 04:15:59

Re: [gelöst]IndentationError:unter Python?

Beitrag von rodney » 03.12.2019 20:24:42

Das ist mir bewusst. Wollte den Herrn nur ein wenig anstupfen. Vielleicht koennte auch ein Moderator die geloest-Markierung wieder entfernen ;-)

P.S. Ich selbst habe aktuell keine Probleme mit Einrueckungen unter Python

Benutzeravatar
TRex
Moderator
Beiträge: 8316
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: [gelöst]IndentationError:unter Python?

Beitrag von TRex » 03.12.2019 20:57:43

Die Probleme des TE sind (wie dieses hier auch) mit ein wenig Lösungsmotivation und ohne Kopf im Sand normalerweise lösbar (oder beantwortbar). Wie auch immer oben die Einrückungsfehler reingekommen sind (vielleicht in vim eingefügt, dabei die Einrückungen verloren, von Hand wieder eingefügt?), cronoik hat die Vorgeschichte ignoriert und das Script berichtigt.

Im Prinzip hätte ein Hinweis gereicht, es nochmal zu kopieren, dabei darauf zu achten, dass keine Leerzeichen an Stellen landen, wo vorher keine waren und dann darauf zu hoffen, dass der TE selbst drauf kommt, dass die erste Vorgehensweise irgendwie falsch war. Da der TE aber regelmäßig mit Widerstand glänzt, wenn man ihm die Infos, Vorgehensweise und Details aus der Nase ziehen muss, ist es ziemlich anstrengend, die Hand zu reichen.

Und darum sehe ich auch keinen Sinn darin, den Thread wieder zu entlösen: jemand hat ein python-Script fehlerhaft kopiert - jemand anderes hat es korrigiert. Wir können noch über das fehlerhafte Kopieren schwadronieren - mir fällt kein Vorgehen ein, das mit dem gleichen Ergebnis endet. Davon hat strunz aber nichts. Ach ja, und die python-Version. Das würde aber auch mit einer Fehlermeldung enden, die man gut nachschlagen und so die Ursache herausfinden kann.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
Strunz_1975
Beiträge: 2512
Registriert: 13.04.2007 14:29:32
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: IndentationError:unter Python?

Beitrag von Strunz_1975 » 04.12.2019 12:49:29

cronoik hat geschrieben: ↑ zum Beitrag ↑
01.12.2019 18:03:15
Ich habe es mir inhaltlich nicht weiter angesehen, aber mal ordentlich eingerueckt.

Code: Alles auswählen

#!/usr/bin/env python
import os

FROM = '/media/werner/USB'

TO_TMP = '/home/werner/'

TO_MULTI = TO_TMP + '/multivol_snapshot'
TO_SNAP = TO_TMP + '/snapshot'

def do(stuff):
    print(stuff)
    os.system(stuff)

def m2s(path):
    assert path.startswith(TO_MULTI), 'It must be a multivol path'
    tmp = path.replace(TO_MULTI, TO_SNAP, 1)
    if tmp.endswith('/'):
        tmp = tmp[:-1]
    return tmp


def main():
    # restore broken dejadup / duplicity fullbackup without manifest
    # Step One
    # untar 
    os.chdir(TO_TMP)
    do("for t in \"" + FROM + "/\"*.difftar; do echo $t; tar xvfi \"$t\"; done;")
    # Step Two
    # join multipart files
    for (path, dirs, files) in os.walk(TO_MULTI):
        print(path)
        if len(dirs) == 0:
		# add leading zeros for more than 10 parts
            for f in files:
                os.rename(os.path.join(path, f),os.path.join(path, str(f).zfill(10)))	
                # we need to combine all these elements
                do("cat \"" + path + "\"/* > \"" + m2s(path) + "\"")
            #do("rm *")
        else:
            do("mkdir -p \"" + m2s(path) + "\"")


if __name__ == '__main__':
    main()
Ich habe es wie hier geschrieben, gemacht!
Debian Bookworm

Antworten