我正在Xcode中使用Google基准测试,并出现了彩色输出。由于Xcode似乎不支持彩色输出,我看到了一些不想要的符号。我想知道是否可以在Google基准测试中强制使用黑白输出。我更喜欢使用他们的API的答案,但也接受其他替代方案。
我正在Xcode中使用Google基准测试,并出现了彩色输出。由于Xcode似乎不支持彩色输出,我看到了一些不想要的符号。我想知道是否可以在Google基准测试中强制使用黑白输出。我更喜欢使用他们的API的答案,但也接受其他替代方案。
--benchmark_format=<console|json|csv>
标志设置格式类型。控制台是默认格式。--benchmark_out=file --benchmark_out_format=console
(默认为json)--benchmark_out=<filename>
指定的文件。可以使用--benchmark_out_format={json|console|csv}
指定输出格式。指定--benchmark_out不会抑制控制台输出。 DEFINE_string(benchmark_color, "auto",
"Whether to use colors in the output. Valid values: "
"'true'/'yes'/1, 'false'/'no'/0, and 'auto'. 'auto' means to use "
"colors if the output is being sent to a terminal and the TERM "
"environment variable is set to a terminal type that supports "
"colors.");
--benchmark_color=false
,或者尝试通过“无用的cat模式”传递控制台输出: ./program | cat
在自动颜色默认模式下,它应该将stdout设置为失败的isatty()
检查(这个技巧可用于禁用彩色grep)。
或者使用export TERM=ansi
更改您的TERM环境变量,以表明您有绿黑CRT监视器:
https://github.com/google/benchmark/blob/09b93ccc6a9aed84c269b6f5b8130c878e518ebb/src/colorprint.cc#L167
// ... This list of
// supported TERM values is copied from Google Test:
// <https://github.com/google/googletest/blob/master/googletest/src/gtest.cc#L2925>.
const char* const SUPPORTED_TERM_VALUES[] = {
"xterm", "xterm-color", "xterm-256color",
"screen", "screen-256color", "tmux",
"tmux-256color", "rxvt-unicode", "rxvt-unicode-256color",
"linux", "cygwin",
};
|cat
和export TERM=ansi
,gbench继续生成彩色输出。这一定是一个bug (!!!)在GetOutputOptions
附近,使得IsColorTerminal()逻辑在"auto"模式下无效,因此"auto"模式并不真正自动启用:ConsoleReporter::OutputOptions GetOutputOptions(bool force_no_color) {
int output_opts = ConsoleReporter::OO_Defaults;
if ((FLAGS_benchmark_color == "auto" && IsColorTerminal()) ||
IsTruthyFlagValue(FLAGS_benchmark_color)) {
output_opts |= ConsoleReporter::OO_Color;
} else {
output_opts &= ~ConsoleReporter::OO_Color;
}
bool IsTruthyFlagValue(const std::string& value) {
if (value.empty()) return true;
char ch = value[0];
return isalnum(ch) &&
!(ch == '0' || ch == 'f' || ch == 'F' || ch == 'n' || ch == 'N');
}
| cat
和TERM = ansi ./ program
一起使用,并可能适用于正确设置TERM的某些IDE)。随时进行拉取请求:--- a/src/benchmark.cc
+++ b/src/benchmark.cc
@@ -555,7 +555,8 @@ bool IsZero(double n) {
ConsoleReporter::OutputOptions GetOutputOptions(bool force_no_color) {
int output_opts = ConsoleReporter::OO_Defaults;
if ((FLAGS_benchmark_color == "auto" && IsColorTerminal()) ||
- IsTruthyFlagValue(FLAGS_benchmark_color)) {
+ (FLAGS_benchmark_color != "auto" &&
+ IsTruthyFlagValue(FLAGS_benchmark_color))) {
output_opts |= ConsoleReporter::OO_Color;
} else {
output_opts &= ~ConsoleReporter::OO_Color;