c++ - 为命令行实用程序寻找任何好的(和免费的)跨平台 CLI 解析库

标签 c++ parsing command-line

<分区>

我目前正在开发一个 CLI 实用程序,我觉得它可以通过添加一个框架得到很大改进。

基本上,该实用程序围绕大量命令行语法和解析输出展开。目前,代码散布在许多单独的内部 run() 和 readFromRunOutput() 调用中,这些调用带有硬编码的 CLI 参数。

例如:

op=run("command -args");
while(readFromRunOutPUr(op))
{
// Process and take result from output
if(op=="result-one")
    dothis();
else if(op=="result-two")
    dothat();
}

我想以此为基础创建一个通用框架,其中 以下是通过 XML 文件从代码外部输入的。 1) 测试名称 2)命令行调用 3) 成功所需的输出

所以假设一个简单的 XML 调用...

<Test name=FirstTest>   
<CLI="command -args">
<Success Output= "value" >
</Success>
</CLI>
</Test>

是的。在上面的例子中有一些问题需要担心,但我想我已经给出了它的要点。基本上我想将所有不同的 CLI 调用移动到代码之外,然后将它们输入(带有成功和失败的标准)。由于许多其他原因,我不能使用任何脚本语言,如 perl 或 python,并且必须使用 C/C++ 维护产品。

据我了解,要求是

Defined XML syntax
Parser for the above XML spec to memory
Get CLI -----> and invoke
Read Output and compare with the fed in values
(Preferably cross platform support)

像这样的实现不仅可以标准化所有不同的单独函数调用,还可以在不更改任何代码的情况下轻松扩展。

现在我的问题是,是否有任何现成的免费库(用于 C++)可用,它们已经提供了我可以扩展的类似或基本模板框架。最好有第一手经验。还有其他指导吗?

最佳答案

好的,针对你真正的问题:

首先,您需要一个合适的 XML 解析器(仅使用 Qt 的 XML 和 XERXES,这对于您的用例来说可能过大,我不能真正推荐一个,但 libxml2 似乎被广泛使用)作为您的输入。 如果我理解正确的话,你只需传递 CLI 的内容即可。标记到命令行,因此不需要解析。您真正的问题似乎是 Success Output ,对吧?

如果是这样,您必须回答的第一个问题是该值是什么意思?如果字符串在输出中的某处就足够了吗?上下文相关吗?如果是这样,如何编码?常用表达?或者更确切地说,您的 XML 配置中的不同节点,如 <contains> , ...

根据您需要找到不同解析器的答案。您很可能使用正则表达式引擎(例如 Boost::regex)。

综上所述,看起来这应该是某种测试框架,您是否查看过可用的替代方案,想到了 CMake 的 CTest,可能还有很多其他框架。

关于c++ - 为命令行实用程序寻找任何好的(和免费的)跨平台 CLI 解析库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083458/

相关文章:

c++ - for循环在Rcpp中崩溃

c++ - STL 算法和迭代器代替 "for"循环

c++ - 如何有效地销毁队列?

datetime - 在 golang 中解析日期

linux - 决定如何使用 set 和 shift 的更清洁的解决方案

c++ - 是否可以将 vector 初始化为另一个附加元素的拷贝

Java:解析字符串并将其分解为 'terms'

c# - 将时间值的字符串表示形式解析为 TimeSpan

ruby - linux 类似于 windows shell 中的行为-运行没有 "ruby"附加到命令的 ruby​​?

python - 从命令行禁用对 python 程序的文件访问