2012-03-28 10 views
12

He creado un proceso usando proc-open pero bajo Windows el stream-select no funciona. Lo que estoy tratando de lograr es leer tanto stdout y stderr , mientras que, además de escribir a la entrada estándar y asegurar que la salida se puede emparejar con las entradas. ¿Hay alguna solución para Windows para superar esta deficiencia?PHP proc_open en Windows

+2

Creo que lo único que puede hacer es configurar sus tuberías en modo no bloqueante y revisarlas manualmente, desafortunadamente. – netcoder

+1

@netcoder - He intentado esto. 'stream_set_blocking' devuelve false :-( –

+0

stderr y stdout no pueden establecerse como no bloqueantes ¿Qué intentas lograr exactamente? Tener un código? select puede no ser necesario aquí. – Pierre

Respuesta

3

No tiene mucha información sobre lo que no funciona para usted con la selección de secuencias en Windows. Sin embargo, este es un ejemplo de trabajo sobre cómo usar la selección de transmisión. Acabo de ejecutar esto con éxito con PHP 5.4 en Windows XP.

Editar: Uhhmmm .. Parece que fue que no funciona después de todo ... Sry, probando un poco más aquí .. :)

de nuevo Edit:

Así pues, hice algunos más experimentando en esto, pero sin éxito.

Tal vez debería dejar que los procesos hablen TCP/UDP/IP el uno al otro?

Otra forma de avanzar (si aún desea usar stdout/stdin/stderr en su proceso) podría ser utilizar proc_open con manejadores de archivos, entonces su proceso está escribiendo en archivos, y luego usar algo similar a unix 'inotify, cargando esto con la clase PHP DOTNET: Is there anything like inotify on Windows? para detectar cambios en los archivos ...? Solo una idea ...

O tal vez cambiar a un sistema operativo unix? ;) Ok, eso es todo para mí esta noche. Buenas noches

+1

'stream_select' en su examen parece inútil. Simplemente lee de los tubos 'stdout' y' stderr' sin mirar realmente lo que se devuelve en '$ read_streams'. Esto podría bloquear si el proceso hijo está ocupado (o el niño escribió en 'stderr' cuando está esperando datos en' stdout') – galymzhan

+0

Sí, después de algunas pruebas parece que tiene razón. Uhm ... –

+1

@AlfredGodoy - El problema es que Windows 'select' no funciona. Pero unix/linux parece funcionar. Perdón por el esfuerzo por el código que no funciona. –