使用qprocess从Windows命令行正确启动cloc 1.62时遇到问题。这就是我所拥有的:
包含cloc识别的所有语言的QStringList;
QStringList languages;
languages<<"\"ABAP\""<<"\"ActionScript\""<<"\"Ada\""<<"\"ADSO/IDSM\""<<"\"AMPLE\""<<"\"Ant\""<<"\"Apex Trigger\"";
然后我创建一个qstring,其中包含以逗号分隔的所有列表元素,exept为1,存储在lang变量中;
QString langsinuse;
for (int i=0;i<languages.length();i++)
{
if (languages.at(i) != lang)
{
if (langsinuse.isEmpty())
{
langsinuse=langsinuse+languages.at(i);
}
else
{
langsinuse=langsinuse+','+languages.at(i);
}
}
}
然后我构建一个参数stringlist并启动该过程:
QStringList arguments;
QProcess cloc;
QString params="cloc-1.62.exe --xml --by-file --report-file="+
list1.at(1).trimmed()+'/'+name+'/'+"report.xml"+" --exclude-lang="+langsinuse+" "+distr;
arguments<<"/k"<<params;
cloc.startDetached("cmd.exe",arguments,"cloc/");
但不知何故,语言名称中的空格不被视为转义,并且每个用空格分隔的单词都被认为是cloc的不同参数,即使这两个单词都是双引号(例如&#34; \&#34; Apex Trigger \&#34;&#34;)和时钟会产生一堆错误。
(50个错误:
无法阅读:触发&#34;,&#34; Arduino
无法阅读:Sketch&#34;,&#34; ASP&#34;,&#34; ASP.Net&#34;,&#34; Assembly&#34;,&#34; AutoHotkey&#34;, &#34; AWK&#34;&#34;伯恩)
当您没有将包含空格的语言包含在双引号中时,发生错误,在--exclude-lang =选项中(例如--exclude- lang = Apex Trigger会导致错误, - exclude-lang =&#34; Apex Trigger&#34;赢了
但是,如果我只保存整个命令,我在qt中构建并将其保存在某个批处理文件中,它运行得很好。
我是否错过了正确转义双引号的内容?
答案 0 :(得分:0)
好的,我只需要单独传递参数而不是单个字符串。
arguments<<"/k"<<"cloc-1.62.exe" <<"--xml"<<"--by-file"<<"--report-file="+
list1.at(1).trimmed()+'/'+name+'/'+"report.xml"<<"--exclude-lang="+langsinuse<<distr;