gflags解析命令行参数, glog输出日志文件


#include <gflags/gflags.h>
#include <glog/logging.h>
#include <iostream>
using namespace std;
  
//DEFINE_xxxxx(参数名, 默认值, --help时的说明文字) 定义命令行参数,
//注意是全局。

DEFINE_int32(iterations, 50,  
    "The number of iterations to run."); 
int main(int argc,char* argv[])
{  
	cout<<"Hello main()"<<endl;
	//将所有日志输出到文件和stderr(终端)
	FLAGS_alsologtostderr = 1;

	//FLAGS_log_dir设置日志输出目录。
	FLAGS_log_dir = "/home/zlf/Documents/Untitled Folder"; 
 
	//gflags::ParseCommandLineFlags()解析命令行参数
        gflags::ParseCommandLineFlags(&argc, &argv, true);  
		
	//访问命令行参数,要在参数名称前面加前缀FLAGS_
	cout<<"iterations: "<<FLAGS_iterations<<endl;
      
	//输出日志文件到日志目录
        google::InitGoogleLogging(argv[0]);

	//对应级别的日志打印在对应级别的日志文件中
	//日志级别:INFO, WARNING, ERROR, FATAL、分别对应级别
	//0, 1, 2, 3
	LOG(INFO)<<"LOG level 0";
        LOG(WARNING)<<"LOG level 1";
	LOG(ERROR)<<"LOG level 2";
        //LOG(FATAL)<<"LOG level 3";
      
	gflags::ShutDownCommandLineFlags();

	cout<<"Goodbye main()"<<endl;
        return 0;

}


运行结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题可能与 gflags 库中的字符串转义机制有关。 在 gflags 中,字符串参数会被解析成 C++ 字符串类型,但是在命令行参数传递过程中,需要使用引号将字符串参数括起来。如果在命令行中传递了带有引号的字符串参数,那么在解析过程中可能会出现转义字符的问题。 例如,假设在命令行中传递了如下字符串参数: ``` --my_string_param="hello world" ``` 在 gflags解析后,该参数的值应该是一个 C++ 字符串类型的变量,值为 "hello world"。但是如果在命令行中传递的参数中包含了转义字符,例如: ``` --my_string_param="hello \"world\"" ``` 那么在解析过程中,转义字符 "\" 可能会被保留,导致最终解析出的字符串参数值为 "hello \"world\""。这可能就是你遇到的问题。 为了避免这种情况,建议在命令行中传递字符串参数时不要使用转义字符。如果必须使用转义字符,可以在代码中手动去除转义字符。 ### 回答2: gflags是一个用于解析命令行参数的库,它可以帮助我们在命令行中传递参数,并根据我们的需要将其解析为相应的类型。在解析string类型参数时,如果我们的参数值中包含了引号,则gflags会自动将其转义。 假设我们在命令行中传递了一个string类型的参数"s",其值为"s",在gflags解析这个参数时,由于参数值中的引号是特殊字符,会引起转义。转义后的结果就是在引号的前面加上一个反斜杠"\”,即变成了"\"s\""。 这个转义过程是为了保证参数值在被解析后能够正确地表示出原始的含义。反斜杠是一种转义字符,用于转义特殊字符,使其具有特殊的含义。在这个例子中,由于引号是一种特殊字符,如果不进行转义,那么在解析后的结果中,无法正确地表示出原始的参数值。 所以,gflags解析string类型参数时,会将参数值中的引号进行转义,将其转化为"\"s\""的形式。这样一来,在程序中就可以正确地将参数值作为一个string类型的变量使用了。 总结起来,gflags解析string参数"s"变成"\"s\""是为了保证参数值的正确解析,并能在程序中以正确的形式使用。 ### 回答3: gflags是一个用于处理命令行参数的开源库。当我们使用gflags解析参数时,有时候我们想要将字符串参数包含在引号内,或者让它们以某种方式被转义。 要将字符串参数"s"解析为"\"s\"",我们可以使用以下方法: 1. 在代码中使用gflags库的方法来解析命令行参数。假设我们有一个string类型的变量s,我们可以使用gflags::ParseCommandLineFlags()方法来解析命令行参数并将其赋值给变量s。 2. 在命令行中以引号包围字符串参数"s",并使用gflags解析。例如,在命令行中输入--s=\"s\"。这样,gflags会将输入的字符串参数解析为"\"s\"",即在字符串前后添加转义字符"\"。 3. 在程序中手动将字符串参数"s"添加转义字符"\"。这种方法适用于不使用命令行参数解析的情况。在代码中,我们可以将字符串参数"s"改为"\"s\"",然后使用它。 总之,gflags可以根据我们的需要来解析和处理字符串参数。通过使用引号包围参数或手动添加转义字符,我们可以将字符串参数"s"解析为"\"s\""。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值