进度条
编辑该页面进度条
当执行执行长时间运行的命令,它可能有助于显示进度信息,更新你的命令运行:
显示进展细节,使用ProgressBar,通过它的单位总数,并推进进度执行命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
使用ob娱乐下载\组件\控制台\助手\ProgressBar;/ /创建一个新的进度条(50单位)美元progressBar=新ProgressBar (美元输出,50);/ /启动并显示进度条美元progressBar- >开始();美元我=0;而(美元我+ + <50){/ /……做一些工作/ /进度条1单位美元progressBar- >提前();/ /你也可以提前超过一个单位的进度条/ / $ progressBar - >进步(3);}/ /确保进度条为100%美元progressBar- >完成();
提示
你也可以回归进度条(即倒退)通过调用$进展- >提前()
一个负值。例如,如果您的电话$进展- >发展(2)
然后它将回归进度条2步骤。
而不是推进(酒吧的步骤提前()方法),您也可以通过调用设置当前进展setProgress ()方法。
如果你恢复长期的任务,这是有用的开始画进度条在某种程度上。使用第二个可选参数start ()
设置起点:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\控制台\助手\ProgressBar;/ /创建一个新的进度条(100台)美元progressBar=新ProgressBar (美元输出,One hundred.);/ /显示进度条开始25单位完成美元progressBar- >开始(零,25);
6.2
开始一个进度条的选择在一定程度上是在Symfony 6.2中引入的。ob娱乐下载
提示
如果你的平台不支持ANSI编码,更新进度条添加新行。为了防止被淹没的输出,使用minSecondsBetweenRedraws ()重绘和数量限制的方法setRedrawFrequency ()每N迭代方法来重绘。默认情况下,重绘频率100毫秒或10%你的马克斯
。
如果你不知道提前台阶的确切数字,将其设置为一个合理的值,然后调用setMaxSteps ()
方法根据需要更新:
1 2 3 4 5
/ /开始progressbar 50台美元progressBar=新ProgressBar (美元输出,50);/ /刚刚创建一个复杂的任务:提高progressbar至200辆美元progressBar- >setMaxSteps (200年);
另一个解决方案是省略参数在创建的步骤ProgressBar实例:
1
美元progressBar=新ProgressBar (美元输出);
的进展将被显示为一个动态浏览图示:
1 2 3 4 5 6 7 8 9
#没有马克斯步骤(显示像throbber) 0(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -) 5(- - - - - - > - - - - - - - - - - - - - - - - - - - - - - -) 5(= = = = = = = = = = = = = = = = = = = = = = = = = = = =] #马克斯步骤定义0/3 (> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]0% 1/3 (= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 3/3 [= = = = = = = = = = = = = = = = = = = = = = = = = = = =)100%
提示
另一种是使用进度而不是一个进度条。
当你的任务完成后,别忘了打电话完成()为了确保进度条显示刷新完成100%。
如果进展信息存储在一个iterable变量(如一个数组或一个PHP发生器)可以使用迭代()方法,它开始,进步和自动完成进度条:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\控制台\助手\ProgressBar;美元progressBar=新ProgressBar (美元输出);/ /美元iterable数组美元iterable= (1,2];foreach(美元progressBar- >迭代(美元iterable)作为美元价值){/ /……做一些工作}/ /或发电机函数iterable(){收益率1;收益率2;…};foreach(美元progressBar- >迭代(iterable ())作为美元价值){/ /……做一些工作}
前面的代码将输出:
1 2 3
0/2 (> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]0% 1/2 [= = = = = = = = = = = = = = > - - - - - - - - - - - - -]50% 2/2 [= = = = = = = = = = = = = = = = = = = = = = = = = = = =)100%
自定义进度条
内置的格式
默认情况下,信息呈现在一个进度条取决于当前的冗长的水平OutputInterface
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# OutputInterface: VERBOSITY_NORMAL (CLI没有冗长的旗帜)0/3 (> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]0% 1/3 (= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 3/3 [= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% # OutputInterface:: VERBOSITY_VERBOSE (- v) 0/3(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -] 0% 1秒1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 1秒3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% 1秒# OutputInterface:: VERBOSITY_VERY_VERBOSE (vv) 0/3(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -] 0% 1秒/ 1秒1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 1秒/ 1秒3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% 1秒/ 1秒# OutputInterface:: VERBOSITY_DEBUG (-vvv) 0/3(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -] 0% 1秒/ 1秒1.0 MB 1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -] 33% 1秒/ 1秒1.0 MB 3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =] 100% 1秒/ 1秒1.0 MB
请注意
如果你叫一个命令与安静的标志(q
),进度条不会显示出来。
而不是依靠冗长的当前模式命令,您还可以通过强制格式setFormat ()
:
1
美元progressBar- >setFormat (“详细”);
内置的格式如下:
正常的
详细的
very_verbose
调试
如果你不为你的进度条设置步骤的数量,使用_nomax
变体:
normal_nomax
verbose_nomax
very_verbose_nomax
debug_nomax
自定义格式
而不是使用内置的格式,你也可以设置自己的:
1
美元progressBar- >setFormat (“%酒吧%”);
这个格式设置为只显示进度条本身:
1 2 3
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = = = = = = = = = > - - - - - - - - - - - - - - - - - - = = = = = = = = = = = = = = = = = = = = = = = = = = = =
一个进度条的格式是一个字符串,其中包含封闭与特定的占位符(一个名称%
字符);的占位符替换基于当前进展。这是一个内置的占位符的列表:
当前的
:当前步骤;马克斯
:步骤的最大数量(或0如果没有定义的最大值);酒吧
:酒吧本身;百分比
:完成的百分比(没有如果没有定义的最大值);运行
:时间开始以来的进度条;剩下的
:剩下的时间来完成任务(没有如果没有定义的最大值);估计
:预计完成任务时间(没有如果没有定义的最大值);内存
:当前内存使用量;消息
:用来显示进度条中的任意消息(稍后解释)。
例如,下面是如何设置的格式是一样的调试
一:
1
美元progressBar- >setFormat (' %电流最大% / % %(%酒吧%)% %:3 s % % %时间:6 s % / %估计:6 s % %记忆:6 s %’);
注意到:6
部分添加到一些占位符吗?这就是你可以调整栏的外观(格式和对齐)。冒号后面的部分(:
)是用于设置sprintf
格式的字符串。
而不是设置一个进度条的格式对于一个给定的实例,您还可以定义全球格式:
1 2 3 4
ProgressBar::setFormatDefinition (“最低”,的进展:% % % %);美元progressBar=新ProgressBar (美元输出,3);美元progressBar- >setFormat (“最低”);
这段代码定义了一个新的最小的
格式,你可以使用你的进度条:
1 2 3
进展:0%进度:33%进度:100%
提示
它几乎总是更好的重新定义内置格式而不是创造新的角色,允许显示自动改变基于命令的冗长的旗帜。
当定义一个新的风格,包含占位符,只可用已知的最大数量的步骤时,您应该创建一个_nomax
变体:
1 2 3 4 5
ProgressBar::setFormatDefinition (“最低”,“剩下的% % % % % %”);ProgressBar::setFormatDefinition (“minimal_nomax”,% % % %的);美元progressBar=新ProgressBar (美元输出);美元progressBar- >setFormat (“最低”);
显示进度条时,将自动设置的格式minimal_nomax
如果酒吧没有像在上面的示例中最大数量的步骤。
提示
可以包含任何有效的ANSI编码和格式设置颜色还可以使用Symfony-specific方式:ob娱乐下载
1 2 3 4
ProgressBar::setFormatDefinition (“最低”,' <信息> % % % > < /信息\ [32 m % 033 \ 033 [0 < fg =白色;bg =蓝色> %剩下% < / > ');
请注意
格式可以跨越多个行;这是非常有用的,当你想要显示更多的上下文信息和进度条(见本文的示例)。
栏设置
占位符,酒吧
有点特殊的字符用于显示它可以定制:
1 2 3 4 5 6 7 8 9 10 11
/ /完成的酒吧的一部分美元progressBar- >setBarCharacter (“<评论> = < /评论>”);/ /未完成部分的酒吧美元progressBar- >setEmptyBarCharacter (' ');/ /字符的进展美元progressBar- >setProgressCharacter (“|”);/ /栏的宽度美元progressBar- >setBarWidth (50);
谨慎
由于性能的原因,Symfony屏幕重绘每隔100毫ob娱乐下载秒。如果这是您的应用程序速度过快或过慢,使用方法minSecondsBetweenRedraws ()和maxSecondsBetweenRedraws ():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
美元progressBar=新ProgressBar (美元输出,50000年);美元progressBar- >开始();/ /这个屏幕重绘的每100次迭代,但设置额外的限制:/ /不重绘低于200毫秒(0.2)或超过100毫秒(0.1)美元progressBar- >setRedrawFrequency (One hundred.);美元progressBar- >maxSecondsBetweenRedraws (0.2);美元progressBar- >minSecondsBetweenRedraws (0.1);美元我=0;而(美元我+ + <50000年){/ /……做一些工作美元progressBar- >提前();}
自定义占位符
如果你想显示一些信息,取决于进度条显示没有可用的列表中内置的占位符,您可以创建自己的。让我们看看如何创建一个remaining_steps
占位符的数量显示剩余的步骤:
1 2 3 4 5 6 7
/ /这个定义为所有ProgressBar是全球注册实例ProgressBar::setPlaceholderFormatterDefinition (“remaining_steps”,函数(ProgressBar美元progressBar,OutputInterface美元输出):int{返回美元progressBar- >getMaxSteps () -美元progressBar- >getProgress ();});
还可以设置一个占位符每ProgressBar格式化程序的实例setPlaceholderFormatter
方法:
1 2 3 4 5
美元progressBar=新ProgressBar (美元输出,3,0);美元progressBar- >setFormat (“%倒计时%(%酒吧%)”);美元progressBar- >setPlaceholderFormatter (“倒计时”,函数(ProgressBar美元progressBar){返回美元progressBar- >getMaxSteps () -美元progressBar- >getProgress ();});
6.3
的setPlaceholderFormatter ()
方法是在Symfony 6.3中引入的。ob娱乐下载
自定义消息
进度条定义一个占位符消息
显示任意的消息。然而,没有一个内置格式包括占位符,在显示这些信息之前,您必须定义自己的自定义格式:
1 2 3 4
ProgressBar::setFormatDefinition (“自定义”,' %电流最大% / % % % - %消息”);美元progressBar=新ProgressBar (美元输出,One hundred.);美元progressBar- >setFormat (“自定义”);
现在,使用setMessage ()
方法设置的值%消息%
占位符之前显示进度条:
1 2 3 4 5 6 7 8
/ /……美元progressBar- >setMessage (“开始”);美元progressBar- >开始();/ / 0/100——开始美元progressBar- >setMessage (“任务正在进行中…”);美元progressBar- >提前();/ / 1/100——任务正在进行中……
消息可以结合自定义占位符。在这个例子中,进度条使用%消息%
和%文件名%
占位符:
1 2 3 4
ProgressBar::setFormatDefinition (“自定义”,' %电流最大% / % % % - %消息文件名(% %)”);美元progressBar=新ProgressBar (美元输出,One hundred.);美元progressBar- >setFormat (“自定义”);
的setMessage ()
方法接受一个可选的参数设置的值定义占位符:
1 2 3 4 5 6 7 8
/ /……/ /文件=['客户端001美元/发票。xml”、“…”);foreach(美元文件作为美元文件名){美元progressBar- >setMessage (“进口发票…”);美元progressBar- >setMessage (美元文件名,“文件名”);美元progressBar- >提前();/ / 2/100——进口发票…(客户端- 001 / invoices.xml)}
多个显示进度条
当使用控制台输出部分可以同时显示多个进度条独立和改变他们的进步:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
美元section1=美元输出- >节();美元section2=美元输出- >节();美元progress1=新ProgressBar (美元section1);美元progress2=新ProgressBar (美元section2);美元progress1- >开始(One hundred.);美元progress2- >开始(One hundred.);美元我=0;而(+ +美元我<One hundred.){美元progress1- >提前();如果(美元我%2= = =0){美元progress2- >推进(4);}usleep (50000年);}
经过几次迭代后,输出的终端将会看起来像这样:
1 2
34/100 (= = = = = = = = = > - - - - - - - - - - - - - - - - - -]34% 68/100 [= = = = = = = = = = = = = = = = = = = > - - - - - - - - - -)68%