Hallo,
bei pipes ist es ja normalerweise so, dass der Prozess, der seine Eingabe aus der Pipe liest, die Daten erst erhält, wenn der in die Pipe schreibende Prozess beendet ist. Beispiel:
ls | less
ls wird erst ausgeführt, DANACH bekommt less die Ausgabe von ls als Eingabe.
Ist es möglich, das zu umgehen? Ich bräuchte nämlich eine Möglichkeit, die Daten eines Prozesses weiterzuverarbeiten, während dieser Prozess noch läuft, also:
Prozess1 | Prozess2
wobei Prozess1 die ganze Zeit weiterläuft und Daten auf die Standardausgabe schreibt, die aber Prozess2 SOFORT weiterverarbeiten soll.
Danke für Hilfe,
Gruß,
some_tea
Pipes bei parallel laufenden Prozessen
Anmeldungsdatum: Beiträge: Zähle... |
|
Anmeldungsdatum: Beiträge: 1349 Wohnort: Österreich, Baden |
Versuche ein Prozess zu starten mit & im Hintergrund zu verschieben, alle Ausgaben in eine Datei umzuleiten, und diese dann mit dem nächsten Prozess wieder ein leiten mit >.. lg xecto |
Ehemalige
![]() Anmeldungsdatum: Beiträge: 6018 Wohnort: Nürnberg |
some_tea hat geschrieben:
Hmm, das sehe ich aber anders: mach mal find / | less Das Find Kommando ist schon eine zeitlang beschäftigt, doch less präsentiert die ersten Daten unmittelbar. |
Ehemalige
![]() Anmeldungsdatum: Beiträge: 2178 Wohnort: Stuttgart |
DrScott hat geschrieben:
So ist es. Eine Pipe (Programm_1 | Programm_2) ist eben dazu da, damit das Programm_2 über STDIN Daten von Programm_1 STDOUT erhält, SOLANGE das Programm_1 läuft, und nicht erst dann, wenn das Programm_1 fertig ist. some_tea hat geschrieben:
Nein, das stimmt so nicht, wie schon DrScott schrieb. Du kannst es sogar selbst testen. Verwendest du z.Bsp. named pipes (man mkfifo), dann kannst du sogar bestimmen, dass das Programm_2 aus einer Pipe liest, die noch nicht befüllt wird. Erst später kommt dann das Programm_1, das in die named pipe schreibt. Der Prozess, in dem das Programm_2 aus der named pipe liest, wartet, bis das Programm_1 in die named pipe schreibt. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 10 |
Hi, Das Ergebnis ist in beiden Fällen das gleiche: Sobald das Programm qalice beendet ist, liest festival die gesamte Ausgabe am Stück vor. Während das Programm noch läuft, passiert nichts. Ich vermute nun, dass das Problem eher bei festival liegt als bei meinen bash-Kentnissen. Wahrscheinlich wartet festival immer auf ein EOF (end of file), bis es zu arbeiten anfängt. Trotzdem danke, |
Anmeldungsdatum: Beiträge: 2159 |
Ja das tut es. Wenn du nur "festival --tts" eingibst wartet das Programm auf eine Eingabe, du kannst dort dann Texte Eingeben. Eine Ausgabe erfolgt erst wenn du "STRG+D" drückst, was für EOF steht. Müsstest du in deinem Programm also irgendwie anpassen das nach jedem Wort ein EOF kommt, oder vielleicht gibt es ja bei festival noch einen anderen Modus. |