繁体   English   中英

Boost.Program_options:将“--”后的参数转发到另一个程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM