我有一个用PHP构建的简单的命令行工具,它工作的很好。不幸的是,我们现在有一些不太聪明的用户在处理数据时敲击键盘。如何在PHP控制台应用程序中刷新STDIN?
有没有办法刷新STDIN,所以它只能开始缓冲从我使用fgetc时的数据?
我试过打开我自己的STDIN管道,甚至通过循环通过那里有哪些作品,但不处理多个CRs冲洗缓冲区。
倒带和fseek似乎没有用PHP中的STDIN做任何事情。
似乎这将是一个普遍的问题,但没有太多。
PHP版本5.3.3
(我不希望使用ncurses的,如果我没有)
任何与fgets或龟etc会表现出我的问题。例如,如果您有提示表明某些内容处于“正在处理”状态,然后开始输入,则输入缓冲在STDIN中,因此当您实际提示用户稍后输入某些内容时,它们将添加到缓冲区中。因此,如果他们在“处理”时键入“abc”,然后提示输入的内容是“abc”,以及在fgets或fgetc时提示输入的内容。所以如果有人一直敲击ENTER并且你正在使用fgets(或者fgetc为“\ n”跳跃),那么你会得到过早的代码延续。
例如:
echo "Processing";
sleep(10); // HIT ENTER A FEW TIMES HERE
echo "Input Something: ";
// REALLY NEED TO FLUSH STDIN HERE SOMEHOW
fgets(STDIN);
我没有得到问题。你能展示一个简单的代码示例以及它应该做什么? – hek2mgl 2014-09-02 13:07:43
PHP根本就没有线程,我很好奇谁会认为在Python上编写CLI util util是一个好主意,或者Java ......用线程技术你可能不会遇到这个问题,米不能确定问题是什么.. – 2014-09-02 13:08:21
@ RaggaMuffin-420这与线程有关吗? – hek2mgl 2014-09-02 13:21:11