2012-03-28 20 views
12

Ho creato un processo utilizzando proc-open ma sotto windows il stream-select non funziona. Quello che sto cercando di ottenere è di leggere sia lo stdout e stderr, mentre in aggiunta scrivendo a stdin e assicurarsi che l'output possa essere confrontato con gli input. C'è una soluzione alternativa per Windows per superare questa carenza?PHP proc_open su windows

+2

Penso che l'unica cosa che puoi fare sia impostare i tuoi tubi in modalità non bloccante e controllarli manualmente, sfortunatamente. – netcoder

+1

@netcoder - Ho provato questo. 'stream_set_blocking' restituisce false :-( –

+0

stderr e stdout non possono essere impostati su non bloccanti Cosa stai cercando di ottenere esattamente? Alcuni codice? selezionare potrebbe non essere necessario qui. – Pierre

risposta

3

Non sei molto dettagliato su ciò che non funziona per te con streaming-selezionare su Windows. Tuttavia, questo è un esempio funzionante su come utilizzare la selezione del flusso. Ho appena eseguito questo con successo con PHP 5.4 su Windows XP.

Edit: Uhhmmm .. Sembra come se fosse non funzionante dopo tutto ... Sry, testare ancora un po 'qui .. :)

Edit ancora:

Così, ho fatto qualche altro esperimento su questo, ma senza successo.

Forse dovresti lasciare che i processi parlino l'uno con l'altro TCP/UDP/IP?

Un altro modo di procedere (se si desidera ancora utilizzare stdout/stdin/stderr nel processo) potrebbe essere quello di utilizzare proc_open con i gestori di file, in modo che il processo stia scrivendo sui file, quindi utilizzare qualcosa di simile a unix 'inotify, caricare questa roba con la classe DOTNET PHP: Is there anything like inotify on Windows? per rilevare le modifiche ai file ...? Solo un'idea ...

O magari passare ad un sistema unix-like? ;) Ok, è tutto per me stasera. Buonanotte

+1

'stream_select' nell'esame sembra inutile. Legge solo dalle pipe 'stdout' e' stderr' senza realmente esaminare cosa viene restituito in '$ read_streams'. Questo potrebbe bloccarsi se il processo figlio è occupato (o il bambino scrive in 'stderr' quando stai aspettando i dati su' stdout') – galymzhan

+0

Sì, dopo alcuni test sembra che tu abbia ragione. Uhm ... –

+1

@AlfredGodoy - Il problema è che windows 'select' non funziona. Ma unix/linux sembra funzionare. Ci scusiamo per lo sforzo per il codice che non funziona. –