PHPUnit 命令行工具中的控制字符有啥问题?
Posted
技术标签:
【中文标题】PHPUnit 命令行工具中的控制字符有啥问题?【英文标题】:What is wrong with control characters in PHPUnit command line tool?PHPUnit 命令行工具中的控制字符有什么问题? 【发布时间】:2012-01-30 11:02:21 【问题描述】:当我从命令行运行 phpunit 时,控制字符会被打印出来,而不是像控制字符一样。看看这个:
PHPUnit 3.6.5 by Sebastian Bergmann.
Configuration read from app\phpunit.xml.dist
...
Time: 1 second, Memory: 12.00Mb
‹[30;42m‹[2KOK (3 tests, 3 assertions)
‹[0m‹[2K
我认为像‹[30;42m<
这样的符号是某种控制字符,应该由控制台以不同的方式使用(定位光标、删除字符等)
这里有什么问题?
【问题讨论】:
交叉引用:How to see color Ant output in MSYS/Git Bash? 超级用户:PHPUnit Windows command box nice colors 【参考方案1】:这是因为您已将 phpunit 配置为使用颜色。
<phpunit colors="true"
但遗憾的是,无法在 Windows 终端上创建彩色输出。
有一个未解决的问题 to not show those chars on windows where they can't be translated into colors
在 phpunit 问题跟踪器上,我正在为此开发补丁。
现在你所能做的就是接受它或从你的 phpunit.xml 配置文件中删除color="true"
。
【讨论】:
当它被明确要求提供 ANSI 颜色代码时,为什么要发出通知? @hakre 告诉你它在 Windows 上不受支持,所以你知道你应该在你的配置中禁用它。毕竟,这就是 OP 面临的问题,她/他不需要问是否有通知。 好吧,如果这是您的配置,那么您一定启用了它,不是吗?可能 pear 安装程序应该处理依赖于平台的默认值,但这将是一个打包问题,而不是 PHPUnit 本身的问题。 @harke 不一定。您可能与使用 linux 的其他人一起工作,并且她/他启用了它,然后您更新了本地 repo,然后您得到了 ctrl 字符。这是通知人们有关不兼容设置的有效请求。我看不出有什么好争论的。 @hakre 如果我找到一种方法来检测终端是否与颜色兼容,我们将使用它。如果不是,我想我只是将它用于 Windows 标准输出【参考方案2】:或者,只需使用 https://github.com/adoxa/ansicon/releases 在 Windows 上获取 ansi 颜色。
源码:https://github.com/adoxa/ansicon
【讨论】:
比我找到的选项好很多。很高兴知道存在:) 挂了,能重新上传一下吗 更新后的网址是adoxa.altervista.org/ansicon,可以从github链接找到。使用 ansicon -i 为当前用户永久安装(或 -I 用于本地计算机)。还为 Windows 上的 Git Bash 启用颜色。【参考方案3】:我最近在尝试从 Windows 7 上的 git bash 中的命令行运行 phpunit 时遇到了同样的问题。在对可能的各种解决方案进行了一些研究之后,我决定在这里分享我选择为自己实现的解决方案。
您可以从 git bash 中过滤掉 ANSI 颜色控制字符。创建一个名为 phpunit
的文件(注意:实际的 phpunit 脚本不在我的路径中,我主要只从 intellij 运行单元测试)并将其放在您的 $PATH
中的任何位置(我自己更喜欢 ~/bin
但没有规则):
#!/bin/sh
/path/to/phpunit "$@" 2>&1 | perl -pe 's/(?<=\e\[)2;//g'
"$@"
告诉 bash 获取传递给脚本的其余参数并将它们转发给 phpunit。 2>&1
redirects stderr to stdout,确保在产生错误输出时产生的任何控制字符也将被过滤掉。
最后,由 phpunit 产生的所有输出都通过 perl 进行管道传输,并通过正则表达式 's/(?<=\e\[)2;//g'
运行,该表达式去除了控制字符。
无论您使用什么<phpunit colors=""
设置,最终结果是 phpunit 运行良好。
希望这会有所帮助!
【讨论】:
【参考方案4】:谢谢丹尼,你的回答很有帮助。
对于想要实现这几点的用户:
-
将 Danny 的代码放入 shell 文件(例如 ~/.phpunit.sh)
在 ~/.bashrc 中为 phpunit 添加一个别名(只需添加以下行)。如果您还没有 .bashrc,只需创建一个空文件。
别名 phpunit="~/.phpunit.sh"
关闭 bash 并再次打开
现在应该可以正常工作了,但请进行测试以确保。【讨论】:
【参考方案5】:正如他们所说,这对我有用。
转到 ~/ 目录中的 .bashrc 并添加
alias phpunitc="phpunit "$@" 2>&1 | perl -pe 's/(?<=\e\[)2;//g'"
然后我只是在 git bash 中使用 phpunitc。您发送给 phpunit 的所有参数也会通过。
【讨论】:
以上是关于PHPUnit 命令行工具中的控制字符有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章