stdin und windows

11/03/2014 - 09:47 von Stefan+Usenet | Report spam
Seit Jahr und Tag lese ich in einer kleinen CLI-Applikation allfaellige,
via stdin uebergebene Daten mit

<?php
$GLOBALS['STDIN'] = '';
stream_set_blocking(STDIN, false);
while ($str = fgets(STDIN, 256)) {
$GLOBALS['STDIN'] .= $str;
}
?>

ein. Das tut, was es tun soll, insbesondere gibt es den Leerstring zurueck,
wenn *keine* Eingabe vorhanden ist.

Nun muss das gleiche Stueck Software unter Windows laufen, und dort tut
es genau das nicht, d.h. falls keine Eingabe auf stdin vorhanden ist,
bleibt das Programm einfach haengen.

Suche ich in Google, bekomme ich eine ganze Reihe von vergleichbaren
Anfragen, aber leider keine Loesung (zu kurz gesucht?). Auffaelligerweise
sind die Fragen aber groesstenteils schon viele Jahre alt. Gibt es da
inzwischen die ganz offensichtliche Loesung[TM], die ich einfach vor lauter
Baeumen nicht sehe?

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Was fuer ein irrer Gedanke: Stefan!
(Sloganizer)
 

Lesen sie die antworten

#1 U. Kadner
11/03/2014 - 10:34 | Warnen spam
Am 11.03.2014 09:47, schrieb Stefan Froehlich:
Seit Jahr und Tag lese ich in einer kleinen CLI-Applikation allfaellige,
via stdin uebergebene Daten mit

<?php
$GLOBALS['STDIN'] = '';
stream_set_blocking(STDIN, false);
while ($str = fgets(STDIN, 256)) {
$GLOBALS['STDIN'] .= $str;
}
?>

ein. Das tut, was es tun soll, insbesondere gibt es den Leerstring zurueck,
wenn *keine* Eingabe vorhanden ist.

Nun muss das gleiche Stueck Software unter Windows laufen, und dort tut
es genau das nicht, d.h. falls keine Eingabe auf stdin vorhanden ist,
bleibt das Programm einfach haengen.



Jup. Unter Windows gibts den Bug, das stream_set_blocking nicht auf
STDIN funktioniert. Dazu gibts mehrere Bugreports. Der àlteste mir
bekannte ist von 2005. Geàndert hat sich bisher nix.

gerade mal hier mit 5.5 unter windows probiert.

stream_set_blocking(STDIN, false); gibt immernoch false zurück und
stream_get_meta_data() zeigt es das blocking nicht deaktiviert wurde.

Suche ich in Google, bekomme ich eine ganze Reihe von vergleichbaren
Anfragen, aber leider keine Loesung (zu kurz gesucht?).



Es gibt ein paar wilde Lösungsansàtze die über Einlesen per Perl u.à.
das zu lösen versuchen. Aber das ist alles sehr sehr sehr crazy.

Keine Ahnung obs da mittlerweile ordnentliche Lösungsmöglichkeiten gibt.
Ich hab schon vor Jahren aufgehört daran zu glauben.

Gruß, Ulf

Ähnliche fragen