boost::program_options 解析我的命令行参数后如何获取非标志和非选项标记

发布于 2024-08-02 18:47:23 字数 440 浏览 11 评论 0原文

在python中,我可以构造我的 optparse 实例,这样它就会自动过滤掉选项和非选项/标志放入两个不同的桶中:

(options, args) = parser.parse_args()

使用 boost::program_options,如何检索剩余的非选项和非标志令牌的令牌列表?

例如,如果我的程序有标志

--foo 
--bar BAR

,然后我传入命令行:

--foo hey --bar BAR you

我怎样才能获得仅由标记“hey”和“you”组成的列表

In python, I can construct my optparse instance such that it will automatically filter out the options and non-option/flags into two different buckets:

(options, args) = parser.parse_args()

With boost::program_options, how do I retrieve a list of tokens which are the remaining non-option and non-flag tokens?

e.g. If my program has flags

--foo 
--bar BAR

and I then pass in the command line:

--foo hey --bar BAR you

how can I get a list comprised solely of tokens "hey" and "you"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两相知 2024-08-09 18:47:23

这是一个示例:

namespace po = boost::program_options;    
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;

m_cmdLine.add_options()
    (/*stuff*/)
    ("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
                        .options(m_cmdLine)
                        .positional(m_positional)
                        .allow_unregistered()
                        .run();
// store, notify, etc

然后只需将“输入”命名选项作为字符串向量获取即可。

Here is an example:

namespace po = boost::program_options;    
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;

m_cmdLine.add_options()
    (/*stuff*/)
    ("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
                        .options(m_cmdLine)
                        .positional(m_positional)
                        .allow_unregistered()
                        .run();
// store, notify, etc

Then just get "input" named options as vector of strings and you are all set.

审判长 2024-08-09 18:47:23

IIRC,您必须使用 < 的组合代码>positional_options_description隐藏选项。这个想法是(1)添加一个普通选项并给它一个名称,可能类似于 --positional=ARG,(2)不要在帮助描述中包含该选项,(3)配置 command_line_parser 以将所有位置参数视为指定了 --positional,并且 (4) 使用 vm["positional"].as< 检索位置参数std::向量>()

源代码树中可能有一个示例,但我现在这台机器上没有它。

IIRC, you have to use a combination of positional_options_description and hidden options. The idea is to (1) add a normal option and give it a name, maybe something like --positional=ARG, (2) don't include that option in the help description, (3) configure command_line_parser to treat all positional arguments as if --positional was specified, and (4) retrieve the positional arguments using vm["positional"].as< std::vector<std::string> >().

There is probably an example somewhere in the source tree but I don't have it on this machine right now.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文