[Python-de] "popen" liesst von stdin ?

Peter Funk pf at artcom0.north.de
Mon May 31 09:48:33 EDT 1999


Hallo Martin!  Hallo Ihr!

Martin v. Loewis schrieb:
> Hmm. Also ich fand den Hinweis auf popen2 zufriedenstellend; das war
> besser als alles, was mir eingefallen wäre (pipe/fork/exec).
> 
> Auch die Diskussion des Deadlock-Problems finde ich irreführend: Es
> ist richtig, daß man dieses Problem verstanden haben muß, das reicht
> aber i.d.R. auch.

Hmmm.... Um das Auftreten eines Deadlocks sicher ausschließen zu
können, muß man außerdem genau wissen, in welcher Reihenfolge und mit
welchen Puffergrößen das jeweilige Filterprogramm seine Read- und
Write-Requests durchführt.

> Wenn man beispielsweise beide Enden eines Filterprogramms bedienen
> will, kann man leicht immer abwechselnd 1kb schreiben und 1kb lesen.
> Dazu braucht das Filterprogramm gar nichts über ein ausgemachtes
> Protokoll zu wissen (i.d.R.)

Das ist meiner Kenntnis nach falsch, was man sich leicht an folgendem
Beispiel veranschaulichen kann:  Nehmen wir einmal an, das Filterprogramm
ist das Unix-Programm 'sort'.  Wie man sich leicht vorstellen kann, muß
'sort' seinen gesamten input komplett einlesen, bevor es das erste
Mal wieder Daten heraus schreiben kann.   Sind also die zu sortierenden
Daten größer als 1kB kommt es zwangsläufig zum Deadlock, sobald das
aufrufende Programm in den ersten Read-Aufruf hinein läuft.

> Falls das Deadlock-Problem tatsächlich echt ist (in der konkreten,
> nicht diskutierten Anwendung), kann man sich immer noch mit
> select.select helfen. Das ist auf jeden Fall eleganter als eine
> temporäre Datei.

Die Gedanken hinter 'select' und damit die Benutzung dieses Moduls
ist aber auch nicht gerade für jedermann geeignet.  Andererseits
kann mit Hilfe von 'select' natürlich der Zwang zur Einhaltung
eines bestimmten Handshake-Protokoll bei der Reihenfolge der Read- und
Write-Aufrufe auf allgemein gültige Art und Weise vermieden werden.

Es wäre doch jetzt hübsch, wenn es aufbauend auf 'popen2' und 'select'
einen Library-Modul namens 'filter' oder so ähnlich gäbe, der die
unschönen Details zur Deadlock-Vermeidung vor dem Anwendungsprogrammer
verstecken würde.  Gibt es das vielleicht sogar schon?
Das wäre eigentlich genau das, wonach ursprünglich gefragt wurde.

Gruß, Peter
-- 
Peter Funk, Oldenburger Str.86, 27777 Ganderkesee, Tel: 04222 9502 70, Fax: -60
Microsoft does have a year 2000 problem. I am part of it. I am running Linux.




More information about the Python-de mailing list