Seite 1 von 1
Linux tar - wie Befehle im aktuellen Verzeichnis starten
Verfasst: Montag 5. September 2011, 19:52
von Jochen1980
Servus,
ich denke ich bekomme das so nicht hin:
ich will ein Archiv entpacken, den entstandenen Ordner dann packen und dabei mittels bz2 komprimieren.
Tu ich das auf der Konsole händisch aus dem aktuellen Verzeichnis heraus, da klappt das, aber leider kann ich ja via Python nicht vor dem os.system()-Aufruf nicht sagen: cd dawillichhin ? Wie macht ihr das ?
Re: Linux tar - wie Befehle im aktuellen Verzeichnis starten
Verfasst: Montag 5. September 2011, 19:57
von cofi
subprocess.Popen hat ein `cwd` Argument dafuer.
Re: Linux tar - wie Befehle im aktuellen Verzeichnis starten
Verfasst: Montag 5. September 2011, 20:33
von Jochen1980
Puh, sind viele Optionen bei Popen ... mal schauen, ob ich das so hinbekomme, scheint aber genau das zu sein, was ich brauche.
Re: Linux tar - wie Befehle im aktuellen Verzeichnis starten
Verfasst: Montag 5. September 2011, 21:02
von Jochen1980
Code: Alles auswählen
# Subprocess-Verwendung
arch_name = "cfa500-1APF_A-178-archive.tar"
comm = "tar"
args = " " + "xvf" + " " + arch_name
wdir = "/home/joba/Desktop/clustereingang/cfa500/tempstorage/"
p = subprocess.Popen( comm + args, cwd=wdir, shell=True )
print( "Popen", p )
input("Weiter mit beliebiger Taste.")
Okay, wie der Name des Moduls schon andeutet scheint es da um Kind-Prozesse zu gehen. Irgendwie schwimmt mir der Prozess weg, ich hätte gerne, dass der Hauptprozess auf den Kindprozess wartet. Aktuell ist es so, dass ich aus dem Entpack-Vorgang nicht mehr zurückkomme, im Hauptthread schlummert aber mein Event-Loop, da wollte ich sicher wieder hinkommen.
Danke vorab für das ein oder andere erläuternde Sätzlein.
Re: Linux tar - wie Befehle im aktuellen Verzeichnis starten
Verfasst: Montag 5. September 2011, 21:21
von cofi
Es gibt `subprocess.call` das tut genau das: Den Kindprozess starten und aufs Ende warten. Alternativ hat ein `Popen` Objekt die Methode `wait`.
Und weil du sowieso deinen Aufruf aufbaust und keine Shell brauchst:
Code: Alles auswählen
arch_name = "cfa500-1APF_A-178-archive.tar"
wdir = "/home/joba/Desktop/clustereingang/cfa500/tempstorage/"
p = subprocess.call(["tar", "xvf", arch_name], cwd=wdir)
Daneben gibts noch das `tempfile` Modul fuer temporaere Verzeichnisse und `tar` kann selbst das Verzeichnis mit der `-C` Option wechseln.
Re: Linux tar - wie Befehle im aktuellen Verzeichnis starten
Verfasst: Montag 5. September 2011, 21:21
von Hyperion
Wir haben hier Python-Code-Tags im Forum! Das solltest Du langsam wissen
Du solltest Dein Kommando nicht so zusammenbauen! Lies doch mal die Doku zu `Popen` und übergib die Sachen als Liste.
Hast Du Dir mal die Funktionen des `subprocess` Moduls angeguckt? Insbesondere `call`? Alternativ auch die Methoden des `Popen`-Objektes.
Als letztes verweise ich noch mal auf das Modul `tarfile` aus der Standardlib. Damit kannst Du die den manuellen Aufruf sparen.