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?