麻烦将参数传递给控制台应用

时间:2015-03-28 17:48:55

标签: qt cmd qprocess cloc

使用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中构建并将其保存在某个批处理文件中,它运行得很好。

我是否错过了正确转义双引号的内容?

1 个答案:

答案 0 :(得分:0)

好的,我只需要单独传递参数而不是单个字符串。

arguments<<"/k"<<"cloc-1.62.exe" <<"--xml"<<"--by-file"<<"--report-file="+
list1.at(1).trimmed()+'/'+name+'/'+"report.xml"<<"--exclude-lang="+langsinuse<<distr;