我正在使用Symfonie的Process组件,正在运行git clone命令,并希望显示它的进度条 到目前为止,我已经做到了:
protected function cloneRepo(String $name)
{
$process = new Process(
"git clone {$this->getGitUrl(true)} {$name}" // does clone the repo works
);
$output = new ConsoleOutput();
// creates a new progress bar (100 units)
$progressBar = new ProgressBar($output, 100);
$process->run();
// starts and displays the progress bar
$progressBar->start();
$files = array_filter(explode("\n", $process->getOutput()), 'strlen');
for ($i = 0; $i < count($files); $i++) {
$progressBar->advance();
}
// ensures that the progress bar is at 100%
$progressBar->finish();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();
}
但这只显示克隆完成后的进度条
答案 0 :(得分:0)
我认为没有一种简单的方法可以绘制进度条,因为据我所知,没有办法知道处理了多少数据。一般来说,您可以启动该过程,然后在streams.home[index]
中使用回调来尝试获取当前输出并从中计算进度。因此您的代码可能看起来像这样。您仍然需要用实际的逻辑替换TODO以确定要提前多少。
wait()