Seite 1 von 2
Noch ein Python-Code?
Verfasst: Samstag 14. Dezember 2019, 19:19
von Strunz_1975
Hallo,
ich habe noch einen Python-Code, der
ein Backup von einer externen USB-Festplatte in ein lokales
Home-Verzeichnis übertragen soll!
Code: Alles auswählen
#!/usr/bin/env python
import os
FROM = '/media/werner/USB1/'
TO_TMP = '/home/werner/Restore/'
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()
Bringt er folgende Fehlermeldung:
tar: Unerwartetes Dateiende im Archiv.
tar: »rmtlseek« nicht an Recordgrenze angehalten
tar: Error is not recoverable: exiting no
Was ist zu tun?
Mfg
Srunz_1975
Re: Noch ein Python-Code?
Verfasst: Samstag 14. Dezember 2019, 19:25
von __blackjack__
@Srunz_1975: Die Frage am Ende ist ganz klar mit *Skript wegwerfen* zu beantworten. Das ist kein Python. Da hat jemand versucht ein Shellskript in Python-Syntax zu prügeln. Erfolglos.
Re: Noch ein Python-Code?
Verfasst: Samstag 14. Dezember 2019, 19:29
von Strunz_1975
Re: Noch ein Python-Code?
Verfasst: Sonntag 15. Dezember 2019, 07:49
von snafu
Deine Thread-Titel lassen auch zu wünschen übrig. Wird es beim nächsten Mal "ein dritter Python-Code" heißen? Orientiere dich dabei besser mal an der (groben) Beschreibung des Problems. Python-Code in einem Python-Forum anzukündigen, ist jetzt nicht sooo besonders...
Re: Noch ein Python-Code?
Verfasst: Freitag 27. Dezember 2019, 18:58
von Strunz_1975
Wie kann ich eine Fortschrittsanzeige mit diesem Code programmieren???
Das Script funktioniert
Mfg
Srunz_1975
Re: Noch ein Python-Code?
Verfasst: Freitag 27. Dezember 2019, 19:20
von Sirius3
Indem Du anfängst, Python zu lernen.
Re: Noch ein Python-Code?
Verfasst: Freitag 27. Dezember 2019, 19:38
von Strunz_1975
hier habe ich ein passendes Programm
https://wiki.ubuntuusers.de/pycp/
Re: Noch ein Python-Code?
Verfasst: Freitag 27. Dezember 2019, 19:43
von Strunz_1975
Oder so:
import time
import progressbar
def job():
bar = progressbar.ProgressBar()
for i in bar(range(100)):
... # Code that you want to run
#time.sleep(0.02)
job()
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 10:52
von Strunz_1975
Ich bekomme folgende Fehlermeldung:
File "DD.py", line 18
def do(stuff):
^
IndentationError: expected an indented block
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 10:57
von Strunz_1975
Hier ist nochmals der Code
Code: Alles auswählen
#!/usr/bin/env python
import os
import time
import progressbar
FROM = '/media/werner/USB2'
TO_TMP = '/home/werner/workspace/Restore'
TO_MULTI = TO_TMP + '/multivol_snapshot'
TO_SNAP = TO_TMP + '/snapshot'
def job():
bar = progressbar.ProgressBar()
for i in bar(range(100)):
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()
time.sleep(0.02)
job()
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 11:15
von __blackjack__
@Srunz_1975:Jetzt willst Du also ohne Python auch nur ansatzweise zu können ein ”Python”-Programm was eh für die Tonne ist, da nicht wirklich Python, durch raten um eine Fortschrittsanzeige erweitern. In dem Du erst mal den ganzen Modulinhalt, also auch die Funktionen inklusive `main()` und dem ``if __name__ == "__main__":`` in eine `job()`-Funktion verschiebst, plötzlich Leerzeichen und Tabs vermischst und die Einrückung insgesamt auch kaputt gemacht wurde. Warum‽

Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 11:19
von Strunz_1975
Weil ich nicht mehr weiter weiss

Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 11:20
von sparrow
In Python ist die Einrückung des Codes wichtig, weil man damit einen Block kennzeichnet.
Per Konvention rückt man mit 4 Leerzeichen ein (keine Tabstops).
Dein gezeigter Code ist aber Kraut und Rüben, was die Einrückung angeht. Ein Zeichen dafür, dass du Codeteile entweder zusammekopiert oder in verschiedenen Editoroen bearbeitet hast.
Eine Funktionsdefinition in eine Funktion zu basteln ist nur in wenigen Fällen eine gute Idee. Oft ist es ein Zeichen dafür, dass man kaschieren will, dass man globale Variablen nutzt (die dann nicht mehr ganz so global sind) oder ein Objekt repräsentiert wird, das eigentlich eine Klasse sein sollte.
In deinem Fall werde ich aus den Einrückungen aber nicht schlau, die musst du erst einmal reparieren.
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 11:58
von Strunz_1975
Kannst du mir nochmals helfen?
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 12:01
von __blackjack__
@sparrow: Das Original ist ja von hier:
https://forum.ubuntuusers.de/topic/kann ... st-8895095
Oder mal kopiert:
Code: Alles auswählen
#!/usr/bin/env python
import os
FROM = '/home/user/von_hier'
TO_TMP = '/home/user/nach_hier'
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()
Das ist also nicht wirklich zusammenkopiert, sondern einfach ”nur” in eine `job()`-Funktion verschoben, plus Zerstörung der Einrückung.
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 12:37
von Strunz_1975
Und was jetzt?
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 12:44
von __blackjack__
Nix.

Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 12:45
von Strunz_1975
Ist aber nicht viel

Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 13:48
von Strunz_1975
Jetzt habe ich es geändert:
Code: Alles auswählen
#!/usr/bin/env python
import os
import time
import progressbar
FROM = '/media/werner/USB1/'
TO_TMP = '/home/werner/Restore/'
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 job():
bar = progressbar.ProgressBar()
for i in bar(range(100)):
# Code that you want to run
time.sleep(0.02)
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()
Re: Noch ein Python-Code?
Verfasst: Samstag 28. Dezember 2019, 14:20
von Sirius3
Schön. Und wann fängst Du an Python zu lernen?