Seite 1 von 1

Pfad wärend Lauf eines Skriptes ändern

Verfasst: Sonntag 25. Mai 2008, 20:37
von alpha
Hallo Pythonfreunde,

ich habe gerade ein kleines Problem mit meinem Script. "tar" unter Linux gibt ienen fehler aus wenn man absolute Pfade verwendet (tar: Entferne führende „/“ von Elementnamen).
daher wechsle ich in meinem Script mit "cd /" auf root. So würde es auch funktionieren, aber das scheint wärend des Scriptlaufs nciht möglich zu sein und ich bekomme immer noch die Fehlermeldung :
"tar: etc: Kann stat nicht ausführen: No such file or directory"

hier das Script:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

import os
backupdirs = [  #die führenden "/" wurden bewußt weggelassen um die Fehlermeldung
                # "tar: Entferne führende „/“ von Elementnamen" zu vermeiden
                #'home/alpha/EigeneDateien',
                'home/alpha/.mozilla',
                #'home/alpha/.evolution',
                'etc'
             ]
backupsafe = "/home/alpha/backup"            

# ins Rootverzeichnis wechseln
expression = "cd /"
ret = os.system(expression)
print ret

# Tar-Datei erstellen             
for backupdir in backupdirs:
    expression = "tar rfv " + "/home/alpha/backup/backup.tar " + backupdir + " > /dev/null"
    print expression
    ret = os.system(expression)
    if ret == 0:
        print (backupdir + ": Erfolgreich zur Backupdatei hinzugefügt")
    else:
        print (backupdir + ": konnte nicht zur Backupdatei hinzugefügt werden")

# Tar-Dateie komprimieren
print "tar Datei erzeugt... beginne mit Komprimierung:"
expression = "bzip2 -9v " + backupsafe + "/backup.tar"
ret = os.system(expression)
if ret == 0:
    print ("Datei erfolgreich komprimiert")
else:
    print ("Fehler beim komprimieren")

Code: Alles auswählen

expression = "cd /"
ret = os.system(expression)
print ret
Das scheint nicht zu funktionieren. Hat jemand eine Lösung für das Problem?

Gruß
alpha

Verfasst: Sonntag 25. Mai 2008, 20:45
von audax
Auszug aus der os-Doku:
system( command)
Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to posix.environ, sys.stdin, etc. are not reflected in the environment of the executed command.
chdir(...)
chdir(path)

Change the current working directory to the specified path.

Verfasst: Sonntag 25. Mai 2008, 20:48
von Trundle
Und die Nutzung von ``[mod]subprocess[/mod].Popen`` ist IMHO auch empfehlenswert.

Verfasst: Sonntag 25. Mai 2008, 22:14
von Leonidas
``subprocess.Popen`` kennt das Argument ``cwd`` mit dem man den Anzuspringenden Pfad angeben kann. Aber das ist gar nicht nötig, denn (zumindest GNU) tar versteht den Parameter ``-C``. Einfach mal in die Manpage gucken.

Verfasst: Montag 26. Mai 2008, 10:36
von lunar
Bei der Nutzung von os.system musst du quoten, oder hat dein ``backupdir`` nie Leerzeichen?

Wenn du unbedingt Unterprozesse nutzen möchtest, dann mit subprocess (ohne shell=True ;) ), dass erspart Quoting und Probleme mit dem Rückgabewert.

Ich möchte an dieser Stelle allerdings auch darauf hinweisen, dass die Standardbibliothek ein Modul zum Auslesen und Erstellen von tar-Archiven mitbringt, dessen Benutzung in diesem Fall sicherlich empfehlenswert wäre. ;)

Verfasst: Freitag 30. Mai 2008, 09:11
von alpha
Danke für die vielen Tips und Hinweise.
Das Modul Tarfile muss ich mir mal anschauen :)

Grüße
alpha