清除 PHP CLI 输出

新手上路,请多包涵

我正在尝试在我的 php CLI 应用程序上运行一个“实时”进度指示器。而不是输出为

1Done
2Done
3Done

我宁愿它被清除并只显示最新结果。 system(“command \C CLS”) 不起作用。 ob_flush()、flush() 或我发现的任何其他东西也没有。

我正在运行 windows 7 64 位终极版,我注意到实时的命令行输出,这是出乎意料的。每个人都警告我 out 不会……但它确实…… 64 位振作?

为帮助干杯!

如果可以的话,我想避免回显 24 行新行。

原文由 user140291 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

尝试输出一行文本并以“\r”而不是“\n”终止它。

“\n”字符是一个换行符,它转到下一行,但“\r”只是一个返回,将光标发送回同一行的位置 0。

所以你可以:

 echo "1Done\r";
echo "2Done\r";
echo "3Done\r";

等等

确保在“\r”之前输出一些空格以清除该行之前的内容。

_[编辑] 可选:对一些历史和背景感兴趣?维基百科有关于 “\n”(换行)“\r”(回车) 的好文章_

原文由 dkamins 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在寻找解决此问题的多行解决方案时遇到了这个问题。这就是我最终想出的。您可以使用 Ansi Escape 命令。 http://www.inwap.com/pdp10/ansicode.txt

 <?php
function replaceOut($str)
{
    $numNewLines = substr_count($str, "\n");
    echo chr(27) . "[0G"; // Set cursor to first column
    echo $str;
    echo chr(27) . "[" . $numNewLines ."A"; // Set cursor up x lines
}

while (true) {
    replaceOut("First Ln\nTime: " . time() . "\nThird Ln");
    sleep(1);
}
?>

原文由 nolanpro 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏