2017-09-08 7 views
5

में काले और सफेद आउटपुट को कैसे बल दें मैं एक्सकोड में Google बेंचमार्क का उपयोग कर रहा हूं और यह किसी कारण से रंगीन आउटपुट का उत्पादन कर रहा है। चूंकि एक्सकोड रंगीन आउटपुट का समर्थन नहीं करता है, इसलिए मैं अवांछित प्रतीकों को देख रहा हूं। मैं सोच रहा था कि क्या Google बेंचमार्क में काले और सफेद आउटपुट को मजबूर करना संभव है। मैं उन उत्तरों को पसंद करता हूं जो उनके एपीआई का उपयोग करते हैं लेकिन मैं अन्य विकल्पों के लिए खुला हूं। गूगल बेंचमार्क कीGoogle बेंचमार्क

+2

आप निम्नलिखित की कोशिश की है पैरामीटर --benchmark_color = {auto | true | false}? –

+0

बढ़िया! वह चाल है। क्या आपको पता है कि सीएमके से निर्दिष्ट करने का कोई तरीका है? @ArtemyVysotsky – German

+1

@Artemy Vysotsky सही सुझाव लागू करने के लिए, आप स्क्रिप्ट बना सकते हैं जो सही पैरामीटर के साथ बेंचमार्क निष्पादन योग्य कहता है। आप उस फ़ाइल को अपने संस्करण नियंत्रण में भी कर सकते हैं और उसके बाद cmake प्रतिलिपि उस फ़ाइल को अपनी बिल्ड निर्देशिका में कॉपी कर सकते हैं। Cmake कमांड [config_file] देखें (https://cmake.org/cmake/help/latest/command/configure_file.html) –

उत्तर

2

रंग उत्पादन अपने रीडमी में बताया गया है: https://github.com/google/benchmark#output-formats

आउटपुट स्वरूप

पुस्तकालय कई उत्पादन प्रारूपों का समर्थन करता। प्रारूप प्रकार सेट करने के लिए --benchmark_format=<console|json|csv> ध्वज का उपयोग करें। कंसोल डिफ़ॉल्ट प्रारूप है।

कंसोल प्रारूप मानव मानव पठनीय प्रारूप होने का इरादा है। डिफ़ॉल्ट रूप से प्रारूप रंग आउटपुट उत्पन्न करता है। संदर्भ stderr और stdout पर सारणीबद्ध डेटा पर आउटपुट है।

वहाँ भी उत्पादन --benchmark_out=file --benchmark_out_format=console साथ फाइल करने के लिए गैर-रंग प्रतिलिपि सहेजने के लिए विकल्प (डिफ़ॉल्ट json है)

पुस्तकालय एक फ़ाइल --benchmark_out=<filename> द्वारा निर्दिष्ट करने के लिए बेंचमार्क के उत्पादन में लेखन का समर्थन करता है है। आउटपुट का प्रारूप --benchmark_out_format={json|console|csv} का उपयोग करके निर्दिष्ट किया जा सकता है। निर्दिष्ट करना --benchmark_out कंसोल आउटपुट को दबा नहीं देता है।

https://github.com/google/benchmark/blob/a271c36af93c7a3b19dfeb2aefa9ca77a58e52e4/src/benchmark.cc#L87

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."); 

तो, आप use --benchmark_color=false as suggested by Artemy (आवरण खोल स्क्रिप्ट का उपयोग) कर सकते हैं, या के साथ "सांत्वना उत्पादन पारित करने के लिए प्रयास करें:

और कार्यान्वयन में वे सांत्वना रंग निष्क्रिय करने के लिए झंडा है बेकार बिल्ली पैटर्न ":

./program | cat 

इसेसेट करना चाहिए ऑटो-रंग डिफ़ॉल्ट मोड में(यह चाल रंग grep अक्षम करने के लिए काम करता है)।

या इंगित करने के लिए आप हरे और काले रंग की सीआरटी मॉनिटर है export TERM=ansi के साथ अपने अवधि env चर बदलने के लिए: 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 रंग उत्पन्न करने के लिए जारी है। यह एक बग होना चाहिए (!!!)GetOutputOptions के पास है, जिससे IsColorTerminal() तर्क "ऑटो" के मामले में एक NOOP, तो "ऑटो" मोड वास्तव में ऑटो यह हमेशा सक्षम है नहीं है:

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; 
} 

IsTruthyFlagValue डिफ़ॉल्ट मान "ऑटो" को सही मानता है, और हमेशा रंग आउटपुट सक्षम करता है, भले ही टर्मिनल इसका समर्थन नहीं करता है!

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 और कुछ IDEs जो सही ढंग से सावधि सेट के साथ शायद के साथ काम करेंगे) गिर पुल अनुरोध करने के लिए स्वतंत्र है:

--- 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; 
+1

बग 0de985ae9d4ea1582125a5414a99ca90c368ca10 https://github.com/google/benchmark/commit/0de985ae9d4ea1582125a5414a99ca90c368ca10 द्वारा 1.2.0 संस्करण में प्रस्तुत प्रतिबद्ध (biojppm जोआओ पाउलो मागाल्हेस मार्च 2 2017 प्रतिबद्ध) - पुराने तर्क केवल जब रंग विकल्प नहीं है IsTruthyFlagValue का उपयोग किया गया ऑटो। https://github.com/google/benchmark/commit/0de985ae9d4ea1582125a5414a99ca90c368ca10#diff-5cd986c2288650e5c5d336b92dcfafd1L549 – osgx

संबंधित मुद्दे