Hi ihrs
ich haette da gern mal ein problem ..
letztens habe ich mir ein shellskript gebastelt mit dem ich einen htmlchat im xterm nutzen kann
alles schoen und gut ..
laeuft auch
ABER: <-- waer ja sonst zu schoen
wget -O - url.de/bla
zeigt auch fein alles an natuerlich mit htmlkram
diese ding pipe ich nun in ein perlskript um die htmlteile rauszzubekommen funktioniert einwandfrei
nur sobald ich von wget -O - url
irgendwie pipe oder in eine datei schreibe cached linux die daten und ich kriege vom chat nur alle 40 sekunden alles auf einmal
das is exrem unpraktisch ..
dabei isses egal ob ich
wget .. |perlskrip
wget .. >datei
wget -O datei ..
wget .. |tee bla
wget .. |sed ...
lynx -dump |irgendwas (der zeigt naemlich auch den quelltext auch bei -force_html)
benutze ..
ergo musses entweder an der pipe liegen oder am cache selbst (falls auch pipehandles gecacht werden kenn mich da net allzugut aus)
hat da irgendwer loesungsideen ?
Pipe - Buffer
Re: Pipe - Buffer
hi,
ich weiß nicht, ob ich es ganz verstanden habe, aber das Problem ist wohl, daß wget seine Ausgabe puffert? Dann mußt du wohl wget hacken...
Gruß,
hjb
ich weiß nicht, ob ich es ganz verstanden habe, aber das Problem ist wohl, daß wget seine Ausgabe puffert? Dann mußt du wohl wget hacken...
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
Re: Pipe - Buffer
seltsamerweise wird bei
wget -O - url.de/bla
der text genau in der richtigen geschwindigkeit auf der konsole
ausgegeben erst duc die pipe wird das teil verlangsamt ..
kann ein programm erkennen
ob seine ausgabe (die ja in der richtigen geschwindigkeit ist) in eine pipe kommt ?
PS:
warum klappt
print "GET /bla
"|telnet url.de 80
nicht ?
wget -O - url.de/bla
der text genau in der richtigen geschwindigkeit auf der konsole
ausgegeben erst duc die pipe wird das teil verlangsamt ..
kann ein programm erkennen
ob seine ausgabe (die ja in der richtigen geschwindigkeit ist) in eine pipe kommt ?
PS:
warum klappt
print "GET /bla
"|telnet url.de 80
nicht ?
Last edited by falko on 29. Jun 2000 10:26, edited 1 time in total.
Re: Pipe - Buffer
Typischerweise wissen Programme, die auf stdout schreiben, nicht das geringste davon, wo die Daten letztendlich landen: Pipe, Datei, Terminal... Ganz egal. Dein Problem dürfte darin begründet liegen, dass beim Schreiben auf ein Terminal "nur" über die line discipline gebuffert wird (tty1-tty12, ttyS[01] sind ja schliesslich character device files). Also nur zeilenweises Buffern; wird das tty explizit in CBREAK oder RAW Modus versetzt, wird gar nicht mehr gebuffert und die Zeichen kommen einzeln an. Sobald aber in "andere" Dateien geschrieben wird (normale Files, Pipes, block device files,...) wird wesentlich aggressiver gebuffert.
Ggf. ist es am einfachsten, tatsächlich wget zu hacken, ein fflush() nach den Ausgabe-printf()s könnte es vielleicht schon richten...
Zum P.S.: Entweder die Anfrage muss ganz korrekt "GET /bla HTTP/1.0" lauten, oder Dein telnet-Client unterstützt das Lesen von stdin nicht. Kommt häufiger vor, weiss nicht, wie sich der Linux-telnet da verhält. Statt dessen einfach nc nehmen (netcat). Löst aber Dein Buffer-Problem nicht, da die Daten - ob nun aus telnet oder nc - irgendwie durch die gebufferte Pipe laufen müssen.
Ggf. ist es am einfachsten, tatsächlich wget zu hacken, ein fflush() nach den Ausgabe-printf()s könnte es vielleicht schon richten...
Zum P.S.: Entweder die Anfrage muss ganz korrekt "GET /bla HTTP/1.0" lauten, oder Dein telnet-Client unterstützt das Lesen von stdin nicht. Kommt häufiger vor, weiss nicht, wie sich der Linux-telnet da verhält. Statt dessen einfach nc nehmen (netcat). Löst aber Dein Buffer-Problem nicht, da die Daten - ob nun aus telnet oder nc - irgendwie durch die gebufferte Pipe laufen müssen.