在python中,我可以构造我的optparse实例,以便它自动将选项和非选项/标志过滤到两个不同的桶中:
(options, args) = parser.parse_args()
使用boost :: program_options,如何检索作为剩余非选项和非标记标记的标记列表?
e.g。如果我的程序有标志
--foo
--bar BAR
然后我传入命令行:
--foo hey --bar BAR you
如何才能获得仅包含令牌“嘿”和“你”的列表
答案 0 :(得分:4)
以下是一个例子:
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
然后只需将“输入”命名选项作为字符串向量,就可以了。
答案 1 :(得分:2)
positional_options_description
和hidden options的组合。这个想法是(1)添加一个正常的选项并给它一个名字,可能像--positional=ARG
,(2)在帮助描述中不包括该选项,(3)配置command_line_parser
到将所有位置参数视为指定--positional
,以及(4)使用vm["positional"].as< std::vector<std::string> >()
检索位置参数。
源代码树中可能有一个例子,但我现在没有在这台机器上。