2012-03-28 46 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