【问题标题】:Show an indicator on CLI while query runs查询运行时在 CLI 上显示指示器
【发布时间】:2014-07-07 15:50:41
【问题描述】:

我有一个通过 CLI 运行的 PHP 脚本,它运行良好,但它运行了几个长查询(2-5 分钟),理想情况下可以让您知道某些事情仍在发生。在遍历结果时,我确实运行了一个更新进度的函数,但是当 PHP 等待查询返回时,会出现静音。

我不需要知道任何关于何时查询将完成的信息,但是 CLI 上的某种指示它正在做某事将是一个巨大的收获(绑定... 或其他东西)。可能吗?

【问题讨论】:

  • 打印出“这可能需要 5 分钟或更长时间”真的不够吗?值是如何返回的?您是否有多个线程或某种事件循环?
  • 第一季度。这已经足够了。仍然希望看到我的问题的答案。 Q2。查询的结果被插入到不同的表中。 Q3。不,单线程。

标签: php command-line-interface


【解决方案1】:

我发现使用不带换行符的回车符\r 非常有帮助。它们将输出重置为行首,但不会向下移动一行,从而可以覆盖当前文本。

请注意,您需要将行填充到全长,否则之前的字符仍会逗留。例如:

$iteration = 0;
while (/* wait condition */) {
    printf("Process still running%-5s\r", str_repeat('.', $iteration % 5));
    sleep(1);
    $iteration++;
}
echo "\n";
echo "Task completed!";

如果您使用for 循环进行处理,这样的事情会更有用:

// Display progress every X iterations
$update_interval = 1000000;

for ($i = 0; $i < $massive_number; $i++) {
    // Do processing

    if ($i % $update_interval == 0) {
        printf("Progress: %.2f%%\r", (100 * $i / $massive_number));
    }
}

【讨论】:

  • 当有迭代时我有类似的东西,但如果有一行代码在几分钟内无法运行查询,有没有办法表明它很忙?
  • @Chords - 除非您可以将单行代码分成更小的代码块,否则不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2019-08-06
  • 2019-09-14
相关资源
最近更新 更多