在 python 中,我可以构建我的optparse实例,以便它会自动将选项和非选项/标志过滤到两个不同的桶中:
(options, args) = parser.parse_args()
使用 boost::program_options,我如何检索剩余的非选项和非标志标记的标记列表?
例如,如果我的程序有标志
--foo
--bar BAR
然后我传入命令行:
--foo hey --bar BAR you
如何获得仅由标记“嘿”和“你”组成的列表
在 python 中,我可以构建我的optparse实例,以便它会自动将选项和非选项/标志过滤到两个不同的桶中:
(options, args) = parser.parse_args()
使用 boost::program_options,我如何检索剩余的非选项和非标志标记的标记列表?
例如,如果我的程序有标志
--foo
--bar BAR
然后我传入命令行:
--foo hey --bar BAR you
如何获得仅由标记“嘿”和“你”组成的列表
这是一个例子:
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
然后只需将“输入”命名选项作为字符串向量就可以了。
IIRC,您必须结合使用positional_options_description
和隐藏选项。这个想法是(1)添加一个普通选项并为其命名,可能类似于--positional=ARG
,(2)不要在帮助描述中包含该选项,(3)配置 command_line_parser
为将所有位置参数视为--positional
已指定,并且(4) 使用 检索位置参数vm["positional"].as< std::vector<std::string> >()
。
源代码树中的某处可能有一个示例,但我现在在这台机器上没有它。