2015-03-28 4 views
0

У меня возникли проблемы с корректным запуском cloc 1.62 из командной строки Windows с использованием qprocess. Вот что у меня есть:проблема с передачей параметров в консольное приложение

QStringList со всеми языками cloc распознает;

QStringList languages; 
languages<<"\"ABAP\""<<"\"ActionScript\""<<"\"Ada\""<<"\"ADSO/IDSM\""<<"\"AMPLE\""<<"\"Ant\""<<"\"Apex Trigger\"";          

Затем я создать QString, состоящий из всех элементов в списке в разделенных запятой, кроме арматуры для одного, который хранится в переменных языках;

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, даже если оба слова заключены в двойные кавычки (например, «Apex Trigger \» »), и часы создают кучу ошибок.

(50 ошибок:

Невозможно прочитать: Trigger», "Arduino

Невозможно прочитать: Эскиз", "ASP", "ASP.Net", "Монтаж", "AutoHotkey", «awk», «Bourne»

Это ошибка, когда вы не указываете имя языка, которое содержит пробелы в двойных кавычках, int --exclude-lang = (например, --exclude-lang = Apex Trigger вызовет ошибку, --exclude-lang = «Apex Trigger» не будет)

Однако, если я просто сохраню цель e, я строю в qt и сохраняю его в каком-то командном файле, который выполняется просто отлично.

Я что-то упустил, избегая двойных кавычек правильно?

ответ

0

Хорошо, мне просто пришлось передавать аргументы отдельно, а не как одну строку.

arguments<<"/k"<<"cloc-1.62.exe" <<"--xml"<<"--by-file"<<"--report-file="+ 
list1.at(1).trimmed()+'/'+name+'/'+"report.xml"<<"--exclude-lang="+langsinuse<<distr; 
Смежные вопросы