[Python-de] Neuer executer für *n*x

Pierre Bernhardt pierre at starcumulus.owl.de
Sam Feb 5 21:24:01 CET 2005


Hallo,

ich habe mir Gedanken über ein kleines Teilprojekt gemacht,
um die Ausführung von Unix/Linux Kommandos und dessen E/O-
Streams über Pipes stark zu vereinfachen.
Die lösungen über Popen und System sind mir dabei zu Umständlich
zu Handhaben und Verknüpfungen von Ein-Ausgabeströmen von Commandos
mit weitern zu startenden Commandos nicht einfach zu Bewerk-
stelligen.

Ich dachte dabei in etwa an ein folgendes Konstrukt über ein Klasse,
welche dann als Basis für die Kommandos dient und dann folgender
maßen benutzt werden kann (Beispiel taren und kompriemieren über Pipe):

class Executer(Thread, Popen3):
     ....

dateien = "/etc"
outfile = "/tmp/etc.tgz"

Tar = Executer("tar -xvf -" + dateien)
Gzip = Executer("gzip -c")

Gzip.writeto(Tar.readfrom())

file.open(outfile, "wb").write(Gzip.readfrom())

tarfiles = Tar.readerr()
gziperr = Gzip.readerr()


Möglich wäre auch folgende Verkettung:

Fgrep = Executer("fgrep" + Suchstring)
Sed = Executer("sed -n 's/hallo/holla/p'")
Sort = Executer("sort -un")
Nocheins = Executer("irgeneincommando")

open(outfile, "wb").write(Nocheins(Sort(Sed(Fgrep(open(infile, "rb").read()))))

Unter unix-shell würde das etwa so aus sehen:

cat ${infile} | fgrep ${suchstring} | sed -n 's/hallo/holla/p' | \
sort -un >$outfile

Das Problem mit Popen liegt dabei an den Deadlocks durch die I/O-Puffer.

Irgendwelche weiteren Ideen, Hinweise oder Kommentare?

MfG...
Pierre Bernhardt
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 294 bytes
Beschreibung: OpenPGP digital signature
URL         : http://starship.python.net/pipermail/python-de/attachments/20050205/0b79f58f/signature.pgp