2012-03-28 50 views
12

我已經使用proc-open創建了一個進程,但在windows下stream-select不起作用。我試圖實現的是從stdoutstderr中讀取,同時另外寫入stdin並確保輸出可以與輸入匹配。有沒有解決方法來解決這個問題?窗口上的PHP proc_open

+2

我認爲你唯一能做的就是將你的管道設置爲非阻塞模式,並且不幸地手動檢查它們。 – netcoder 2012-03-28 14:17:56

+1

@netcoder - 我試過了。 'stream_set_blocking'返回false :-( – 2012-03-28 14:21:56

+0

stderr和stdout不能設置爲非阻塞 你想要達到什麼目的?有一些代碼?select可能在這裏沒有必要 – Pierre 2012-04-01 15:49:09

回答

3

對於在Windows上使用流選擇無法正常工作的問題,您不是很詳細。但是,這是如何使用流選擇的一個工作示例。我在Windows XP上使用PHP 5.4成功執行了此操作。

編輯: Uhhmmm ..好像是不工作的再次

編輯畢竟... Sry基因,測試一些更在這裏.. :):所以

,我做一些更多的嘗試,但沒有成功。

也許你應該讓進程對對方講TCP/UDP/IP?另一種前進的方式(如果你仍然想在你的進程中使用stdout/stdin/stderr)可能是使用proc_open和文件處理程序,所以你的進程正在寫入文件,然後使用類似於unix的東西'inotify,加載這個東西與PHP DOTNET類:Is there anything like inotify on Windows?檢測文件的變化......?只是一個想法...

或者也許更改爲unix樣os? ;)好吧,今晚就是這樣。晚安

+1

'stream_select'在你的考試中人們似乎毫無用處。它只是從'stdout'和'stderr'管道中讀取,而沒有真正查看'$ read_streams'中返回的內容。這可能會阻止子進程忙(或者當你在等待stdout數據時,孩子寫入'stderr') – galymzhan 2012-04-06 14:09:33

+0

是的,經過一些測試,你似乎是對的。呃... – 2012-04-06 15:28:21

+1

@AlfredGodoy - 問題是windows'select'不起作用。但似乎工作的Unix/Linux。對不起,代碼不起作用的努力。 – 2012-04-06 16:30:33