如何对命令行进行彩色和样式输出

3.4 版本
维护中的版本

通过在命令行的output中使用颜色,你可以区分不同类型的输出(比如,重要的信息,标题,注释,等等)。

默认时,Windows的command console不支持彩色输出。Console对Windows系统禁用了颜色输出,但如果你的命令调用了发射颜色序列的其他脚本,它们会被错误地显示为转义字符(译注:在win10上命令行问题比较多,写进度条时也是怪异的,颜色和小图标都无法应用,推荐使用mac osx等系统玩symfony)。安装 Cmder, ConEmu, ANSICONMintty (GitBash和Cygwin默认使用的) 等免费程序以便为你的windows命令行添加颜色支持。

使用颜色样式 

只要你输出文本,就可以对文字加上标签以实现彩色输出。例如:

1
2
3
4
5
6
7
8
9
10
11
// green text / 绿字
$output->writeln('<info>foo</info>');
 
// yellow text / 黄字
$output->writeln('<comment>foo</comment>');
 
// black text on a cyan background / 青色背景上的黑字
$output->writeln('<question>foo</question>');
 
// white text on a red background / 红背景上的白字
$output->writeln('<error>foo</error>');

标签闭合时可以用 </> 来替代,它会撤消所有由“最后一个未关闭的标签”所建立的格式化选项。

使用 OutputFormatterStyle 类,也可以建立你自己的样式:

1
2
3
4
5
6
7
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
 
// ...
$style = new OutputFormatterStyle('red', 'yellow', array('bold', 'blink'));
$output->getFormatter()->setStyle('fire', $style);
 
$output->writeln('<fire>foo</fire>');

可用的前景和背景颜色是: black, red, green, yellow, blue, magenta, cyan 以及 white.

另有可用的选项是: bold, underscore, blink, reverse (可开启 "reverse video" 模式,即将前景和背景颜色互换) 以及 conceal (设置前景的颜色为透明,可隐藏上屏的文字 - 却仍可以选择和复制; 此选项在要求用户键入敏感信息时常会用到)。

1
2
3
4
5
6
7
8
// green text / 绿字
$output->writeln('<fg=green>foo</>');
 
// black text on a cyan background / 青背景上的黑字
$output->writeln('<fg=black;bg=cyan>foo</>');
 
// bold text on a yellow background / 黄背景上的粗字
$output->writeln('<bg=yellow;options=bold>foo</>');

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)