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 ?
Linux tar - wie Befehle im aktuellen Verzeichnis starten
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
subprocess.Popen hat ein `cwd` Argument dafuer.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 40
- Registriert: Montag 15. August 2011, 18:44
Puh, sind viele Optionen bei Popen ... mal schauen, ob ich das so hinbekomme, scheint aber genau das zu sein, was ich brauche.
-
- User
- Beiträge: 40
- Registriert: Montag 15. August 2011, 18:44
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.")
Danke vorab für das ein oder andere erläuternde Sätzlein.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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:
Daneben gibts noch das `tempfile` Modul fuer temporaere Verzeichnisse und `tar` kann selbst das Verzeichnis mit der `-C` Option wechseln.
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)
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert