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

Martin v. Loewis martin at mira.isdn.cs.tu-berlin.de
Mon May 31 19:21:17 EDT 1999


> > 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'.

Ich sag' ja:

>> Es ist richtig, daß man dieses Problem verstanden haben muß, das
>> reicht aber i.d.R. auch.

import random,popen2

r,w = popen2.popen2("sort")

for i in range(1,100000):
    w.write(str(random.random())+"\n")

w.close()
s = r.read()
print s

Dieses Programm erzeugt lauter zufällige Strings, und zwar deutlich
mehr als die interne Puffergröße einer pipe. Danach werden die
sortierten Strings gelesen und ausgegeben. Funktioniert unter Linux
2.2.

Das Pythonprogramm muß wissen, wie das Filterprogramm
funktioniert. Das Filterprogramm muß nicht geändert werden. *In der
Regel* kommt man mit dem Lesen und Schreiben von 1k-Blöcken aus -
sort(1) ist eine Ausnahme! Wie man sieht, kann auch bei dieser
Ausnahme leicht eine Lösung finden.

Ciao,
Martin




More information about the Python-de mailing list