[英]Boost.Program_options: Forward parameters after '--' to another program
我正在编写一个 C++ 应用程序A ,它在后台调用另一个应用程序B。 一些命令行选项适用于应用程序A ,但有些应转发给B 。 分隔应该使用双破折号--
。
例如:
./my_executable_A -a --long_b some_file -- -c --long_d
应该解析{"-a", "--long_b", "some_file"}
在应用程序A和向前{"-c", "--long_d"}
至应用程序B时,它由A调用。
我认为对任务使用boost::program_options
可能有意义,但我没有找到这个功能。 这可能吗?
注意:用例是一个libfuse
文件系统,其中一些选项将被转发到fuse_main()
函数。
这是默认行为(如果未记录)并且至少从 Boost 1.33 开始; --
被认为是一个“终结符” ,它之后的所有命令行参数都可以作为位置选项访问:
bool a = false, b = false;
std::vector<std::string> command;
po::options_description desc("Allowed options");
desc.add_options()
("long_a,a", po::bool_switch(&a), "a")
("long_b,b", po::bool_switch(&b), "b")
("command", po::value(&command));
po::positional_options_description p;
p.add("command", -1);
po::variables_map vm;
po::parsed_options parsed = po::command_line_parser(argc, argv).options(desc).positional(p).run();
po::store(parsed, vm);
po::notify(vm);
没有内置的支持。 我推荐的只是从整个 argv 数组中创建一个 std::vector,找到“--”,如果找到,将向量切片并将第一部分传递给 program_options(它也接受 std::vector)和第二部分到你的程序。
您将拥有的一个选择是让它们全部作为参数进来,然后在“--”之后将这些参数存储在另一个字符**中,然后发送到分叉进程。 请注意,在分叉之前,您可能希望设置输出和输入,以便它们可以相互通信,具体取决于您希望应用程序 B 做什么
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.